Add initial support for parsing struct patterns (#7446)

Implements parsing of struct patterns as per
https://github.com/carbon-language/carbon-lang/issues/6680.

This handles the full and short syntax given in the [design
doc](https://github.com/carbon-language/carbon-lang/blob/trunk/docs/design/pattern_matching.md#struct-patterns),
but the handling of the shorthand syntax may need to change as I move on
to implementing Check support (currently the shorthand is represented as
one of `LetBindingPattern`, `VarBindingPattern`, or `VariablePattern`).

This implementation assumes that the answer to
https://github.com/carbon-language/carbon-lang/issues/7404 is that
trailing commas are allowed in the struct pattern, except for the case
where an `_` is present, in which case the next token must be the
closing brace `}`.
This commit is contained in:
oli-ej
2026-07-30 16:37:46 +00:00
committed by GitHub
parent 8f224222a1
commit a683fb574b
21 changed files with 1999 additions and 57 deletions
+14
View File
@@ -35,6 +35,11 @@ auto HandleParseNode(Context& context, Parse::TuplePatternStartId node_id)
return HandlePatternListStart(context, node_id);
}
auto HandleParseNode(Context& context, Parse::StructPatternStartId node_id)
-> bool {
return context.TODO(node_id, "struct pattern start");
}
auto HandleParseNode(Context& context, Parse::ExplicitParamListStartId node_id)
-> bool {
context.full_pattern_stack().StartExplicitParamList();
@@ -129,6 +134,15 @@ auto HandleParseNode(Context& context, Parse::TuplePatternId node_id) -> bool {
return true;
}
auto HandleParseNode(Context& context, Parse::StructPatternId node_id) -> bool {
return context.TODO(node_id, "struct pattern");
}
auto HandleParseNode(Context& context,
Parse::StructPatternDesignatedFieldId node_id) -> bool {
return context.TODO(node_id, "struct pattern field");
}
auto HandleParseNode(Context& context, Parse::PatternListCommaId /*node_id*/)
-> bool {
EndExprRegionForPattern(context, context.node_stack());