Add check support for struct patterns (#7876)

Implements check and pattern matching support for struct patterns.

This PR implements complete patterns, and leaves `_` field handling for
future work.
This commit is contained in:
oli-ej authored and GitHub committed 2026-10-30 21:03:16 +00:00
1 parent 3ee012b86a
commit c6b54b57e2
23 files changed
+1764 -110

No files matched your search

+6 -2
View File
@@ -281,7 +281,9 @@ static auto HandleBindingPatternFinish(Context& context, StateKind finish_kind)
auto node_kind = NodeKind::InvalidParse;
if (state.in_var_pattern) {
node_kind = NodeKind::VarBindingPattern;
node_kind = state.in_field_shorthand_pattern
? NodeKind::StructPatternFieldVarBindingPattern
: NodeKind::VarBindingPattern;
if (finish_kind != StateKind::BindingPatternFinishAsRegular) {
CARBON_DIAGNOSTIC(NonRegularBindingInVarDecl, Error,
"found {0:generic|`:?`} binding inside `var` pattern",
@@ -297,7 +299,9 @@ static auto HandleBindingPatternFinish(Context& context, StateKind finish_kind)
node_kind = NodeKind::CompileTimeBindingPattern;
break;
case StateKind::BindingPatternFinishAsRegular:
node_kind = NodeKind::LetBindingPattern;
node_kind = state.in_field_shorthand_pattern
? NodeKind::StructPatternFieldLetBindingPattern
: NodeKind::LetBindingPattern;
break;
case StateKind::BindingPatternFinishAsForm:
node_kind = NodeKind::FormBindingPattern;