require_impls_stack.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. #include "toolchain/check/require_impls_stack.h"
  5. namespace Carbon::Check {
  6. auto RequireImplsStack::Push(EnclosingScopeId scope_id) -> void {
  7. scope_ids_.push_back(scope_id);
  8. array_stack_.PushArray();
  9. }
  10. auto RequireImplsStack::Pop() -> void {
  11. scope_ids_.pop_back();
  12. array_stack_.PopArray();
  13. }
  14. auto RequireImplsStack::AppendToTop(SemIR::RequireImplsId id) -> void {
  15. array_stack_.AppendToTop(id);
  16. }
  17. auto RequireImplsStack::PeekTop() const
  18. -> llvm::ArrayRef<SemIR::RequireImplsId> {
  19. return array_stack_.PeekArray();
  20. }
  21. auto RequireImplsStack::PeekForScope(EnclosingScopeId scope_id)
  22. -> llvm::ArrayRef<SemIR::RequireImplsId> {
  23. auto it = std::find(scope_ids_.rbegin(), scope_ids_.rend(), scope_id);
  24. CARBON_CHECK(it != scope_ids_.rend());
  25. auto index = std::distance(it, scope_ids_.rend()) - 1;
  26. return array_stack_.PeekArrayAt(index);
  27. }
  28. } // namespace Carbon::Check