mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-04 12:11:04 +01:00
Track the start of a signature more accurately (#6760)
This change ensures that a function signature always starts with an `IdentifierNameMaybeBeforeSignature` node (renamed from `IdentifierNameBeforeParams`), even in the case of function declarations like `fn F -> T` that have no parameter list. As a consequence, this ensures that we push new entries onto `pattern_block_stack` and `full_pattern_stack` when we start processing the function signature.
This commit is contained in:
@@ -52,19 +52,6 @@ auto HandleParseNode(Context& context, Parse::FunctionIntroducerId node_id)
|
||||
auto HandleParseNode(Context& context, Parse::ReturnTypeId node_id) -> bool {
|
||||
auto [type_node_id, type_inst_id] = context.node_stack().PopExprWithNodeId();
|
||||
|
||||
// If the previous node was `IdentifierNameBeforeParams`, then it would have
|
||||
// caused these entries to be pushed to the pattern stacks. But it's possible
|
||||
// to have a fn declaration without any parameters, in which case we find
|
||||
// `IdentifierNameNotBeforeParams` on the node stack. Then these entries are
|
||||
// not on the pattern stacks yet. They are only needed in that case if we have
|
||||
// a return type, which we now know that we do.
|
||||
if (context.node_stack().PeekNodeKind() ==
|
||||
Parse::NodeKind::IdentifierNameNotBeforeParams) {
|
||||
context.pattern_block_stack().Push();
|
||||
context.full_pattern_stack().PushFullPattern(
|
||||
FullPatternStack::Kind::ExplicitParamList);
|
||||
}
|
||||
|
||||
// Propagate the type expression.
|
||||
auto form_expr = ExprAsReturnForm(context, type_node_id, type_inst_id);
|
||||
context.PushReturnForm(form_expr);
|
||||
|
||||
Reference in New Issue
Block a user