| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
- // Exceptions. See /LICENSE for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- #ifndef CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
- #define CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
- #include "toolchain/check/node_stack.h"
- #include "toolchain/parse/node_ids.h"
- #include "toolchain/sem_ir/ids.h"
- namespace Carbon::Check {
- class Context;
- // A component in a declaration name, such as `C[T:! type](N:! T)` in
- // `fn C[T:! type](N:! T).F() {}`.
- struct NameComponent {
- // The name of the declaration.
- Parse::NodeId name_loc_id;
- SemIR::NameId name_id;
- // Parse tree bounds for the parameters, including both implicit and explicit
- // parameters. These will be compared to match between declaration and
- // definition.
- Parse::NodeId first_param_node_id;
- Parse::NodeId last_param_node_id;
- // The implicit parameter list.
- Parse::NodeId implicit_params_loc_id;
- SemIR::InstBlockId implicit_param_patterns_id;
- // The explicit parameter list.
- Parse::NodeId params_loc_id;
- SemIR::InstBlockId param_patterns_id;
- // The `Call` parameters of the entity, if it's a function (see the
- // corresponding member of SemIR::EntityWithParamsBase).
- // TODO: This is only used for function declarations. Should it go somewhere
- // else?
- SemIR::InstBlockId call_params_id;
- // The return slot.
- // TODO: This is only used for function declarations. Should it go
- // somewhere else?
- SemIR::InstId return_slot_pattern_id;
- // The pattern block.
- SemIR::InstBlockId pattern_block_id;
- };
- // Pops a name component from the node stack (and pattern block stack, if it has
- // parameters).
- auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id =
- SemIR::InstId::None)
- -> NameComponent;
- // Equivalent to PopNameComponent, but also diagnoses if the name component has
- // parameters.
- auto PopNameComponentWithoutParams(Context& context, Lex::TokenKind introducer)
- -> NameComponent;
- } // namespace Carbon::Check
- #endif // CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
|