mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-11-15 15:08:10 +00:00
allow trailing commas in a struct pattern after an _ field (#8074)
Following a leads decision (https://github.com/carbon-language/carbon-lang/issues/7404), this PR adds support for trailing commas in a struct pattern where it was previously only allowed after a full field.
This commit is contained in:
1 parent
80a4a4d005
commit
5ae3dcaa92
8 files changed
+78
-25
No files matched your search
+31
-7
@@ -32,6 +32,10 @@ let {.x = 1, .y = 2};
|
||||
|
||||
let {.x = y: i32, _} = {};
|
||||
|
||||
// --- struct_pattern_discard_with_comma.carbon
|
||||
|
||||
let {.x = y: i32, _, } = {};
|
||||
|
||||
// --- struct_pattern_unnamed.carbon
|
||||
|
||||
let {.x = _: i32} = {};
|
||||
@@ -136,13 +140,13 @@ let {.x x:i32} = {};
|
||||
|
||||
// --- fail_struct_pattern_token_after_underscore.carbon
|
||||
|
||||
// CHECK:STDERR: fail_struct_pattern_token_after_underscore.carbon:[[@LINE+2]]:20: error: unexpected token `,` after `_` in struct pattern, expected `}` [ExpectedCloseAfterUnderscore]
|
||||
// CHECK:STDERR: fail_struct_pattern_token_after_underscore.carbon:[[@LINE+2]]:20: error: unexpected token `.` after `_` in struct pattern, expected `}` [ExpectedCloseAfterUnderscore]
|
||||
// CHECK:STDERR:
|
||||
let {.x = x: i32, _,} = {};
|
||||
let {.x = x: i32, _. } = {};
|
||||
|
||||
// --- fail_struct_pattern_underscore_not_last.carbon
|
||||
|
||||
// CHECK:STDERR: fail_struct_pattern_underscore_not_last.carbon:[[@LINE+2]]:6: error: unexpected token `,` after `_` in struct pattern, expected `}` [ExpectedCloseAfterUnderscore]
|
||||
// CHECK:STDERR: fail_struct_pattern_underscore_not_last.carbon:[[@LINE+2]]:8: error: unexpected token `.` after `,` in struct pattern with `_` field, expected `}` [ExpectedCloseAfterUnderscore]
|
||||
// CHECK:STDERR:
|
||||
let{_, .x = x: i32} = {};
|
||||
|
||||
@@ -337,7 +341,28 @@ let {var _: i32} = {};
|
||||
// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':'
|
||||
// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '='
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ │ ├─UnderscoreName '_'
|
||||
// CHECK:STDOUT: │ │ ├─PatternListUnderscoreField '_'
|
||||
// CHECK:STDOUT: │ ├─StructPattern '}'
|
||||
// CHECK:STDOUT: │ ├─LetInitializer '='
|
||||
// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{'
|
||||
// CHECK:STDOUT: │ ├─StructLiteral '}'
|
||||
// CHECK:STDOUT: ├─LetDecl ';'
|
||||
// CHECK:STDOUT: ├─FileEnd ''
|
||||
// CHECK:STDOUT: (root)
|
||||
// CHECK:STDOUT: - filename: struct_pattern_discard_with_comma.carbon
|
||||
// CHECK:STDOUT: ╭─FileStart ''
|
||||
// CHECK:STDOUT: │ ╭─LetIntroducer 'let'
|
||||
// CHECK:STDOUT: │ │ ╭─StructPatternStart '{'
|
||||
// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x'
|
||||
// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.'
|
||||
// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y'
|
||||
// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':'
|
||||
// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32'
|
||||
// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':'
|
||||
// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '='
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ │ ├─PatternListUnderscoreField '_'
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ ├─StructPattern '}'
|
||||
// CHECK:STDOUT: │ ├─LetInitializer '='
|
||||
// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{'
|
||||
@@ -715,8 +740,7 @@ let {var _: i32} = {};
|
||||
// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':'
|
||||
// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '='
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ │ ├─UnderscoreName '_' has_error
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ │ ├─PatternListUnderscoreField '_' has_error
|
||||
// CHECK:STDOUT: │ ├─StructPattern '}' has_error
|
||||
// CHECK:STDOUT: │ ├─LetInitializer '='
|
||||
// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{'
|
||||
@@ -728,7 +752,7 @@ let {var _: i32} = {};
|
||||
// CHECK:STDOUT: ╭─FileStart ''
|
||||
// CHECK:STDOUT: │ ╭─LetIntroducer 'let'
|
||||
// CHECK:STDOUT: │ │ ╭─StructPatternStart '{'
|
||||
// CHECK:STDOUT: │ │ ├─UnderscoreName '_' has_error
|
||||
// CHECK:STDOUT: │ │ ├─PatternListUnderscoreField '_' has_error
|
||||
// CHECK:STDOUT: │ │ ├─PatternListComma ','
|
||||
// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x'
|
||||
// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.'
|
||||
|
||||
Reference in new issue
Block a user