// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // AUTOUPDATE // TIP: To test this file alone, run: // TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/struct/struct_pattern.carbon // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/struct/struct_pattern.carbon // --- struct_pattern_empty.carbon let {} = {}; // --- struct_pattern_one_entry.carbon let {.x = y: i32} = {}; // --- struct_pattern_trailing_comma.carbon let {.x = y: i32,} = {}; // --- struct_pattern_two_entries.carbon let {.x = y: i32, .m = n: i32} = {}; // --- struct_value_literal_as_pattern.carbon let {.x = 1, .y = 2}; // --- struct_pattern_discard.carbon let {.x = y: i32, _} = {}; // --- struct_pattern_unnamed.carbon let {.x = _: i32} = {}; // --- struct_pattern_shorthand.carbon let {x: i32, y: i32} = {}; // --- struct_pattern_shorthand_ref.carbon let {ref x: i32, y: i32} = {}; // --- struct_pattern_shorthand_mixed.carbon let {.x = y: i32, m: i32} = {}; // --- struct_pattern_designated_tuple.carbon let{x: i32, .y = (a: i32, b: i32)} = {}; // --- struct_pattern_designated_struct.carbon let{x: i32, .y = {a: i32, b: i32}} = {}; // --- fail_struct_pattern_comma_only.carbon // CHECK:STDERR: fail_struct_pattern_comma_only.carbon:[[@LINE+4]]:6: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {,} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {,} = {}; // --- fail_struct_pattern_missing_designator.carbon // CHECK:STDERR: fail_struct_pattern_missing_designator.carbon:[[@LINE+4]]:6: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {= y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {= y: i32} = {}; // --- fail_struct_pattern_invalid_designator.carbon // CHECK:STDERR: fail_struct_pattern_invalid_designator.carbon:[[@LINE+4]]:7: error: expected identifier after `.` [ExpectedIdentifierAfterPeriodOrArrow] // CHECK:STDERR: let {.7 = y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.7 = y: i32} = {}; // --- fail_struct_pattern_designator_only.carbon // CHECK:STDERR: fail_struct_pattern_designator_only.carbon:[[@LINE+4]]:8: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x} = {}; // --- fail_struct_type_literal_as_pattern.carbon // CHECK:STDERR: fail_struct_type_literal_as_pattern.carbon:[[@LINE+4]]:8: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x: i32} = {}; // --- fail_struct_pattern_period_only.carbon // CHECK:STDERR: fail_struct_pattern_period_only.carbon:[[@LINE+4]]:7: error: expected identifier after `.` [ExpectedIdentifierAfterPeriodOrArrow] // CHECK:STDERR: let {.} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.} = {}; // --- fail_struct_pattern_repeated_comma.carbon // CHECK:STDERR: fail_struct_pattern_repeated_comma.carbon:[[@LINE+4]]:18: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {.x = x: i32,,} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x = x: i32,,} = {}; // --- fail_struct_pattern_missing_comma.carbon // CHECK:STDERR: fail_struct_pattern_missing_comma.carbon:[[@LINE+4]]:21: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {.x = x: i32 .y = y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x = x: i32 .y = y: i32} = {}; // --- fail_struct_pattern_missing_pattern.carbon // CHECK:STDERR: fail_struct_pattern_missing_pattern.carbon:[[@LINE+4]]:11: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {.x = } = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x = } = {}; // --- fail_struct_pattern_shorthand_missing_identifier.carbon // CHECK:STDERR: fail_struct_pattern_shorthand_missing_identifier.carbon:[[@LINE+4]]:6: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {:i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {:i32} = {}; // --- fail_struct_pattern_shorthand_missing_expression.carbon // CHECK:STDERR: fail_struct_pattern_shorthand_missing_expression.carbon:[[@LINE+4]]:9: error: expected expression [ExpectedExpr] // CHECK:STDERR: let {x: } = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {x: } = {}; // --- fail_struct_pattern_shorthand_missing_comma.carbon // CHECK:STDERR: fail_struct_pattern_shorthand_missing_comma.carbon:[[@LINE+4]]:13: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {x: i32 y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {x: i32 y: i32} = {}; // --- fail_struct_pattern_missing_equals.carbon // CHECK:STDERR: fail_struct_pattern_missing_equals.carbon:[[@LINE+4]]:9: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x x:i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x x:i32} = {}; // --- fail_struct_pattern_token_after_underscore.carbon // CHECK:STDERR: fail_struct_pattern_token_after_underscore.carbon:[[@LINE+4]]:20: error: unexpected token `,` after `_` in struct pattern, expected `}` [ExpectedCloseAfterUnderscore] // CHECK:STDERR: let {.x = x: i32, _,} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x = x: i32, _,} = {}; // --- fail_struct_pattern_underscore_not_last.carbon // CHECK:STDERR: fail_struct_pattern_underscore_not_last.carbon:[[@LINE+4]]:6: error: unexpected token `,` after `_` in struct pattern, expected `}` [ExpectedCloseAfterUnderscore] // CHECK:STDERR: let{_, .x = x: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let{_, .x = x: i32} = {}; // --- fail_struct_pattern_extra_token_end.carbon // CHECK:STDERR: fail_struct_pattern_extra_token_end.carbon:[[@LINE+4]]:18: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {.x = x: i32 foo, .y = y: i32} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {.x = x: i32 foo, .y = y: i32} = {}; // --- fail_struct_pattern_extra_token_start.carbon // CHECK:STDERR: fail_struct_pattern_extra_token_start.carbon:[[@LINE+4]]:26: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {.x = x: i32, foo .y = y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {.x = x: i32, foo .y = y: i32} = {}; // --- fail_struct_pattern_shorthand_extra_token_end.carbon // CHECK:STDERR: fail_struct_pattern_shorthand_extra_token_end.carbon:[[@LINE+4]]:13: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {x: i32 foo, y: i32} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {x: i32 foo, y: i32} = {}; // --- fail_struct_pattern_shorthand_extra_token_start.carbon // CHECK:STDERR: fail_struct_pattern_shorthand_extra_token_start.carbon:[[@LINE+4]]:18: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {x: i32, foo y: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {x: i32, foo y: i32} = {}; // --- fail_struct_pattern_invalid_introducer.carbon // CHECK:STDERR: fail_struct_pattern_invalid_introducer.carbon:[[@LINE+4]]:6: error: expected pattern [ExpectedPattern] // CHECK:STDERR: let {!x = x: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {!x = x: i32} = {}; // --- fail_struct_pattern_extra_token_middle.carbon // recover on `=` // CHECK:STDERR: fail_struct_pattern_extra_token_middle.carbon:[[@LINE+4]]:9: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x foo = x: ()} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {.x foo = x: ()} = {}; // no equals or comma - recover on `}` // CHECK:STDERR: fail_struct_pattern_extra_token_middle.carbon:[[@LINE+4]]:9: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x foo x: ()} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {.x foo x: ()} = {}; // no equals, trailing comma - recover on `,` // CHECK:STDERR: fail_struct_pattern_extra_token_middle.carbon:[[@LINE+4]]:9: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x foo x: (),} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {.x foo x: (),} = {}; // no equals, second field - recover on `,` // CHECK:STDERR: fail_struct_pattern_extra_token_middle.carbon:[[@LINE+4]]:9: error: expected `= value` after `.field` [ExpectedStructPatternDesignatedField] // CHECK:STDERR: let {.x foo x: (), .y = y: ()} = {}; // CHECK:STDERR: ^~~ // CHECK:STDERR: let {.x foo x: (), .y = y: ()} = {}; // --- fail_struct_pattern_invalid_field.carbon // CHECK:STDERR: fail_struct_pattern_invalid_field.carbon:[[@LINE+4]]:12: error: expected `,` or `}` [UnexpectedTokenAfterListElement] // CHECK:STDERR: let {"foo" = , .x = x:()} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {"foo" = , .x = x:()} = {}; // --- fail_struct_pattern_nested_tuple_pattern.carbon // CHECK:STDERR: fail_struct_pattern_nested_tuple_pattern.carbon:[[@LINE+4]]:14: error: Tuple pattern in shorthand struct pattern field. Use `.field = (...)` instead [NestedTuplePatternInStructPatternShortField] // CHECK:STDERR: var {x: i32, (y: i32, z: i32)} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: var {x: i32, (y: i32, z: i32)} = {}; // --- fail_struct_pattern_nested_var_tuple_pattern.carbon // CHECK:STDERR: fail_struct_pattern_nested_var_tuple_pattern.carbon:[[@LINE+4]]:18: error: Tuple pattern in shorthand struct pattern field. Use `.field = (...)` instead [NestedTuplePatternInStructPatternShortField] // CHECK:STDERR: let {x: i32, var (y: i32, z: i32)} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {x: i32, var (y: i32, z: i32)} = {}; // --- fail_struct_pattern_nested_struct_pattern.carbon // CHECK:STDERR: fail_struct_pattern_nested_struct_pattern.carbon:[[@LINE+4]]:13: error: Struct pattern in shorthand struct pattern field. Use `.field = {...}` instead [NestedStructPatternStructPatternShortField] // CHECK:STDERR: let{x: i32, {y: i32, z: i32}} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let{x: i32, {y: i32, z: i32}} = {}; // --- fail_struct_pattern_unused_shorthand.carbon // CHECK:STDERR: fail_struct_pattern_unused_shorthand.carbon:[[@LINE+4]]:7: error: Anonymous binding found in struct pattern. Use `.field = _: field_type` or `unused field: field_type` [AnonymousBindingInStructPattern] // CHECK:STDERR: var {_: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: var {_: i32} = {}; // CHECK:STDERR: fail_struct_pattern_unused_shorthand.carbon:[[@LINE+4]]:11: error: Anonymous binding found in struct pattern. Use `.field = _: field_type` or `unused field: field_type` [AnonymousBindingInStructPattern] // CHECK:STDERR: let {ref _: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {ref _: i32} = {}; // CHECK:STDERR: fail_struct_pattern_unused_shorthand.carbon:[[@LINE+4]]:11: error: Anonymous binding found in struct pattern. Use `.field = _: field_type` or `unused field: field_type` [AnonymousBindingInStructPattern] // CHECK:STDERR: let {var _: i32} = {}; // CHECK:STDERR: ^ // CHECK:STDERR: let {var _: i32} = {}; // CHECK:STDOUT: - filename: struct_pattern_empty.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_one_entry.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_trailing_comma.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 10}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_two_entries.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'm'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 17}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 22}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_value_literal_as_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_discard.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_unnamed.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_shorthand.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_shorthand_ref.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_shorthand_mixed.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'm'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 14}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 19}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_designated_tuple.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 14}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 21}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 26}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: struct_pattern_designated_struct.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 14}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 21}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 26}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_comma_only.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_missing_designator.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_designator.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '7', has_error: yes}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_designator_only.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_type_literal_as_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_period_only.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '}', has_error: yes}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_repeated_comma.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_missing_comma.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 6}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 9}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_missing_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_identifier.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_expression.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_comma.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_missing_equals.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'x', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_token_after_underscore.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_', has_error: yes}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_underscore_not_last.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_', has_error: yes}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_end.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 17}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 22}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_start.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 13}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 18}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_extra_token_end.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_extra_token_start.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_introducer.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '!', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_middle.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, // CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 10}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 15}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, // CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 8}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 15}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 20}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_field.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'StringLiteral', text: '"foo"'}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, // CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, // CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 8}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_nested_tuple_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 18}, // CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 19}, // CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 24}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_nested_var_tuple_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, // CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 12}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 19}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 24}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_nested_struct_pattern.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 18}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 23}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] // CHECK:STDOUT: - filename: fail_struct_pattern_unused_shorthand.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, // CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, // CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 7}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, // CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, // CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 7}, // CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, // CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ]