mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
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:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user