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:
@@ -27,6 +27,7 @@ static auto HandleVar(Context& context, StateKind finish_state_kind,
|
||||
|
||||
context.PushStateForPattern(StateKind::Pattern, /*in_var_pattern=*/true,
|
||||
/*in_unused_pattern=*/false,
|
||||
/*in_field_shorthand_pattern=*/false,
|
||||
BindingContext::ExplicitParam,
|
||||
PrecedenceGroup::ForTopLevelPattern());
|
||||
}
|
||||
@@ -101,7 +102,8 @@ auto HandleVariablePattern(Context& context) -> void {
|
||||
// A `var` binding is always runtime, regardless of the enclosing context.
|
||||
context.PushStateForPattern(
|
||||
StateKind::Pattern, /*in_var_pattern=*/true, state.in_unused_pattern,
|
||||
BindingContext::ExplicitParam, state.ambient_precedence);
|
||||
state.in_field_shorthand_pattern, BindingContext::ExplicitParam,
|
||||
state.ambient_precedence);
|
||||
}
|
||||
|
||||
auto HandleFinishVariablePattern(Context& context) -> void {
|
||||
|
||||
Reference in New Issue
Block a user