From 74e1a9949f159e22c8d01ee55ae8a6dab24a38ca Mon Sep 17 00:00:00 2001 From: Geoff Romer Date: Wed, 19 Feb 2025 19:17:45 -0800 Subject: [PATCH] Support tuple patterns outside parameter lists (#4923) Parameter lists need substantially different treatment than tuple patterns in other contexts, so this change splits them into separate parse node kinds. --------- Co-authored-by: Jon Ross-Perkins --- toolchain/check/eval.cpp | 1 + toolchain/check/handle_let_and_var.cpp | 43 +- toolchain/check/handle_pattern_list.cpp | 102 ++-- toolchain/check/name_component.cpp | 5 +- toolchain/check/node_stack.h | 12 +- toolchain/check/pattern_match.cpp | 467 ++++++++------ toolchain/check/subpattern.cpp | 6 +- toolchain/check/subpattern.h | 4 +- .../fail_pattern_in_signature.carbon | 39 +- .../fail_assoc_const_not_binding.carbon | 4 +- .../tuple/no_prelude/tuple_pattern.carbon | 577 ++++++++++++++++++ toolchain/diagnostics/diagnostic_kind.def | 4 + toolchain/parse/handle_choice.cpp | 2 +- .../parse/handle_decl_name_and_params.cpp | 4 +- toolchain/parse/handle_pattern_list.cpp | 76 ++- toolchain/parse/node_kind.def | 2 + toolchain/parse/state.def | 31 +- toolchain/parse/testdata/alias/basic.carbon | 4 +- .../parse/testdata/alias/fail_syntax.carbon | 4 +- .../parse/testdata/array/fail_syntax.carbon | 4 +- .../parse/testdata/auto/match_case.carbon | 4 +- toolchain/parse/testdata/auto/return.carbon | 4 +- .../basics/fail_bracket_recovery.carbon | 4 +- .../basics/fail_invalid_designators.carbon | 4 +- .../testdata/basics/function_call.carbon | 4 +- .../parse/testdata/basics/multifile.carbon | 8 +- .../testdata/basics/numeric_literals.carbon | 4 +- toolchain/parse/testdata/basics/parens.carbon | 4 +- ...il_missing_definition_parameterized.carbon | 4 +- toolchain/parse/testdata/choice/local.carbon | 4 +- .../testdata/choice/parameterized.carbon | 8 +- toolchain/parse/testdata/class/adapt.carbon | 4 +- .../testdata/class/base_misplaced.carbon | 4 +- toolchain/parse/testdata/class/basic.carbon | 4 +- .../testdata/class/fn_definitions.carbon | 12 +- toolchain/parse/testdata/class/local.carbon | 16 +- .../class/mismatched_introducer.carbon | 4 +- .../for/fail_colon_instead_of_in.carbon | 4 +- .../testdata/for/fail_missing_cond.carbon | 4 +- .../parse/testdata/for/fail_missing_in.carbon | 4 +- .../testdata/for/fail_missing_var.carbon | 4 +- .../testdata/for/fail_returned_var.carbon | 4 +- .../testdata/for/fail_square_brackets.carbon | 4 +- toolchain/parse/testdata/for/nested.carbon | 4 +- toolchain/parse/testdata/for/simple.carbon | 4 +- .../testdata/function/declaration/addr.carbon | 4 +- .../function/declaration/basic.carbon | 4 +- .../function/declaration/extern.carbon | 16 +- ...skip_indented_newline_until_outdent.carbon | 4 +- ...ail_skip_indented_newline_with_semi.carbon | 4 +- ..._skip_indented_newline_without_semi.carbon | 4 +- .../fail_skip_to_newline_without_semi.carbon | 4 +- .../fail_skip_without_semi_to_curly.carbon | 4 +- .../fail_with_identifier_as_param.carbon | 4 +- .../function/declaration/impl_fn.carbon | 16 +- .../declaration/implicit_empty.carbon | 4 +- .../declaration/implicit_params.carbon | 4 +- .../function/declaration/params.carbon | 4 +- .../declaration/with_return_type.carbon | 4 +- .../testdata/function/definition/basic.carbon | 4 +- .../function/definition/builtin.carbon | 8 +- .../function/definition/decl_statement.carbon | 24 +- .../function/definition/extern.carbon | 8 +- .../function/definition/fail_builtin.carbon | 16 +- .../fail_identifier_in_statements.carbon | 4 +- .../function/definition/nested.carbon | 8 +- .../function/definition/with_params.carbon | 4 +- .../definition/with_return_type.carbon | 4 +- .../generics/deduced_params/empty.carbon | 8 +- .../generics/deduced_params/one.carbon | 8 +- .../deduced_params/one_suffix_comma.carbon | 8 +- .../generics/deduced_params/six.carbon | 8 +- .../generics/deduced_params/two.carbon | 8 +- .../deduced_params/two_suffix_comma.carbon | 8 +- .../generics/generic_params/basic.carbon | 4 +- .../fail_template_no_param.carbon | 20 +- .../generics/generic_params/template.carbon | 4 +- .../generic_params/template_addr.carbon | 8 +- .../parse/testdata/generics/impl/basic.carbon | 4 +- .../parse/testdata/generics/impl/class.carbon | 4 +- .../impl/fail_out_of_line_member.carbon | 12 +- .../testdata/generics/interface/basic.carbon | 8 +- .../generics/interface/default_fn.carbon | 8 +- .../interface/fail_self_param_syntax.carbon | 8 +- .../generics/interface/final_fn.carbon | 8 +- .../interface/final_member_definition.carbon | 4 +- .../generics/interface/non_instance_fn.carbon | 4 +- .../generics/interface/self_pointer.carbon | 8 +- .../generics/named_constraint/basic.carbon | 4 +- .../named_constraint/defined_method.carbon | 4 +- .../testdata/generics/params/empty.carbon | 8 +- .../generics/params/name_qualifier.carbon | 64 +- .../parse/testdata/generics/params/one.carbon | 8 +- .../generics/params/one_suffix_comma.carbon | 8 +- .../parse/testdata/generics/params/six.carbon | 8 +- .../parse/testdata/generics/params/two.carbon | 8 +- .../generics/params/two_suffix_comma.carbon | 8 +- toolchain/parse/testdata/if/basic.carbon | 4 +- toolchain/parse/testdata/if/else.carbon | 4 +- .../testdata/if/fail_else_unbraced.carbon | 4 +- .../parse/testdata/if/fail_errors.carbon | 4 +- .../testdata/if/fail_missing_cond.carbon | 4 +- .../testdata/if/fail_square_brackets.carbon | 4 +- .../parse/testdata/if/fail_unbraced.carbon | 4 +- toolchain/parse/testdata/if_expr/basic.carbon | 4 +- .../if_expr/fail_condition_missing.carbon | 4 +- .../if_expr/fail_else_expr_missing.carbon | 4 +- .../testdata/if_expr/fail_else_missing.carbon | 4 +- .../if_expr/fail_then_expr_missing.carbon | 4 +- .../testdata/if_expr/fail_then_missing.carbon | 4 +- .../testdata/if_expr/fail_top_level_if.carbon | 4 +- .../parse/testdata/if_expr/in_type.carbon | 4 +- .../parse/testdata/if_expr/precedence.carbon | 4 +- toolchain/parse/testdata/let/let.carbon | 4 +- toolchain/parse/testdata/let/let_tuple.carbon | 4 +- .../parse/testdata/let/missing_value.carbon | 4 +- .../match/fail_cases_after_default.carbon | 4 +- .../match/fail_missing_case_arrow.carbon | 4 +- .../match/fail_missing_case_pattern.carbon | 4 +- .../fail_missing_case_statements_block.carbon | 4 +- .../testdata/match/fail_missing_cases.carbon | 4 +- .../match/fail_missing_cases_block.carbon | 4 +- .../match/fail_missing_default_arrow.carbon | 4 +- ...il_missing_default_statements_block.carbon | 4 +- .../fail_missing_guard_close_paren.carbon | 4 +- .../fail_missing_guard_open_paren.carbon | 4 +- ...sing_guard_parens_only_parse_errors.carbon | 4 +- .../match/fail_missing_matched_expr.carbon | 4 +- ...il_unexpected_tokens_in_cases_block.carbon | 4 +- toolchain/parse/testdata/match/match.carbon | 4 +- .../testdata/member_access/compound.carbon | 4 +- .../member_access/fail_keyword.carbon | 4 +- .../testdata/member_access/keyword.carbon | 4 +- .../testdata/member_access/simple.carbon | 4 +- .../parse/testdata/namespace/args.carbon | 4 +- .../parse/testdata/namespace/basic.carbon | 4 +- .../parse/testdata/namespace/local.carbon | 4 +- .../parse/testdata/namespace/nested.carbon | 4 +- .../parse/testdata/operators/assign.carbon | 4 +- .../testdata/operators/associative.carbon | 4 +- .../operators/fail_chained_assign.carbon | 4 +- .../operators/fail_postincrement.carbon | 4 +- .../operators/fail_precedence_and_or.carbon | 4 +- .../operators/fail_precedence_as.carbon | 4 +- .../operators/fail_precedence_assign.carbon | 4 +- .../operators/fail_precedence_or_and.carbon | 4 +- .../operators/fail_precedence_where.carbon | 36 +- .../operators/fail_prefix_repeat.carbon | 4 +- .../testdata/operators/fail_variety.carbon | 4 +- .../testdata/operators/fixity_in_call.carbon | 4 +- .../operators/fixity_in_params.carbon | 4 +- .../testdata/operators/fixity_in_var.carbon | 4 +- .../operators/fixity_with_assign.carbon | 4 +- .../parse/testdata/operators/infix.carbon | 4 +- .../testdata/operators/postfix_repeat.carbon | 4 +- .../testdata/operators/precedence_as.carbon | 4 +- .../operators/precedence_assign.carbon | 4 +- .../testdata/operators/precedence_not.carbon | 4 +- .../operators/precedence_unary.carbon | 4 +- .../operators/precedence_where.carbon | 16 +- .../testdata/operators/prefix_repeat.carbon | 4 +- .../parse/testdata/operators/spaceship.carbon | 4 +- .../testdata/operators/three_stars.carbon | 4 +- .../parse/testdata/operators/unary.carbon | 8 +- .../package_expr/fail_standalone.carbon | 4 +- .../packages/import/fail_after_decl.carbon | 4 +- .../import/fail_after_decl_repeated.carbon | 8 +- .../import/fail_in_nested_scope.carbon | 4 +- .../library/fail_in_nested_scope.carbon | 8 +- .../packages/package/fail_after_decl.carbon | 4 +- .../package/fail_in_nested_scope.carbon | 8 +- .../testdata/pointer/const_pointer.carbon | 12 +- .../pointer/fail_pointer_type_in_expr.carbon | 4 +- ...e_instead_of_compound_member_access.carbon | 4 +- .../testdata/pointer/pointer_type.carbon | 4 +- .../testdata/pointer/pointer_value.carbon | 4 +- toolchain/parse/testdata/return/basic.carbon | 4 +- toolchain/parse/testdata/return/expr.carbon | 4 +- .../testdata/return/fail_expr_no_semi.carbon | 4 +- .../parse/testdata/return/fail_no_semi.carbon | 4 +- .../return/fail_returned_no_var.carbon | 4 +- .../testdata/return/fail_var_no_semi.carbon | 4 +- .../parse/testdata/return/returned_var.carbon | 4 +- toolchain/parse/testdata/tuple/nested.carbon | 23 + toolchain/parse/testdata/var/var.carbon | 4 +- toolchain/parse/testdata/var/var_tuple.carbon | 4 +- .../parse/testdata/where_expr/basic.carbon | 8 +- .../testdata/where_expr/designators.carbon | 20 +- .../testdata/where_expr/fail_rewrite.carbon | 28 +- .../testdata/where_expr/where_and.carbon | 20 +- toolchain/parse/testdata/while/basic.carbon | 4 +- .../testdata/while/fail_missing_cond.carbon | 4 +- .../parse/testdata/while/fail_no_semi.carbon | 4 +- .../parse/testdata/while/fail_unbraced.carbon | 4 +- toolchain/parse/tree_test.cpp | 16 +- toolchain/parse/typed_nodes.h | 21 +- toolchain/parse/typed_nodes_test.cpp | 2 +- toolchain/sem_ir/file.cpp | 3 +- toolchain/sem_ir/inst_kind.def | 1 + toolchain/sem_ir/stringify_type.cpp | 1 + toolchain/sem_ir/typed_insts.h | 10 + 201 files changed, 1680 insertions(+), 860 deletions(-) create mode 100644 toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon diff --git a/toolchain/check/eval.cpp b/toolchain/check/eval.cpp index 367d9785a060..ca2251345c8e 100644 --- a/toolchain/check/eval.cpp +++ b/toolchain/check/eval.cpp @@ -2155,6 +2155,7 @@ static auto TryEvalInstInContext(EvalContext& eval_context, case SemIR::ReturnSlotPattern::Kind: case SemIR::StructLiteral::Kind: case SemIR::TupleLiteral::Kind: + case SemIR::TuplePattern::Kind: case SemIR::ValueParam::Kind: case SemIR::VarPattern::Kind: case SemIR::VarStorage::Kind: diff --git a/toolchain/check/handle_let_and_var.cpp b/toolchain/check/handle_let_and_var.cpp index d96ddfdd6ef6..9d6e9e8d4da7 100644 --- a/toolchain/check/handle_let_and_var.cpp +++ b/toolchain/check/handle_let_and_var.cpp @@ -15,6 +15,7 @@ #include "toolchain/check/return.h" #include "toolchain/check/subpattern.h" #include "toolchain/diagnostics/diagnostic_emitter.h" +#include "toolchain/diagnostics/format_providers.h" #include "toolchain/lex/token_kind.h" #include "toolchain/parse/node_kind.h" #include "toolchain/sem_ir/ids.h" @@ -135,17 +136,7 @@ static auto GetOrAddStorage(Context& context, SemIR::InstId pattern_id) auto HandleParseNode(Context& context, Parse::VariablePatternId node_id) -> bool { auto subpattern_id = SemIR::InstId::None; - if (context.node_stack().PeekIs(Parse::NodeKind::TuplePattern)) { - context.node_stack().PopAndIgnore(); - CARBON_CHECK( - context.node_stack().PeekIs(Parse::NodeKind::TuplePatternStart)); - context.node_stack().PopAndIgnore(); - context.inst_block_stack().PopAndDiscard(); - context.TODO(node_id, "tuple pattern in let/var"); - subpattern_id = SemIR::ErrorInst::SingletonInstId; - } else { - subpattern_id = context.node_stack().PopPattern(); - } + subpattern_id = context.node_stack().PopPattern(); auto type_id = context.insts().Get(subpattern_id).type_id(); auto pattern_id = AddPatternInst( @@ -251,21 +242,7 @@ static auto HandleDecl(Context& context) -> DeclInfo { } context.full_pattern_stack().PopFullPattern(); - if (auto [tuple_pattern_node_id, tuple_inst_block_id] = - context.node_stack().PopWithNodeIdIf(); - tuple_inst_block_id) { - context.TODO(tuple_pattern_node_id, "tuple pattern in let/var"); - - // TODO: Tuple patterns don't behave like other patterns. They are - // associated with an InstBlockId on the node stack rather than an InstId, - // and leave behind an entry on the subpattern stack and one on the node - // stack. - EndSubpatternAsExpr(context, SemIR::ErrorInst::SingletonInstId); - context.node_stack().PopForSoloNodeId(); - decl_info.pattern_id = SemIR::ErrorInst::SingletonInstId; - } else { - decl_info.pattern_id = context.node_stack().PopPattern(); - } + decl_info.pattern_id = context.node_stack().PopPattern(); context.node_stack().PopAndDiscardSoloNodeId(); @@ -382,7 +359,19 @@ auto HandleParseNode(Context& context, Parse::VariableDeclId node_id) -> bool { context, decl_info.introducer, KeywordModifierSet::Access | KeywordModifierSet::Returned); - if (context.scope_stack().GetCurrentScopeAs()) { + if (auto class_scope = + context.scope_stack().GetCurrentScopeAs()) { + auto var = context.insts().GetAs(decl_info.pattern_id); + if (!context.insts().TryGetAs(var.subpattern_id)) { + CARBON_DIAGNOSTIC(ExpectedSymbolicBindingInFieldDecl, Error, + "pattern in field declaration is not a " + "single `:` binding"); + context.emitter().Emit(context.insts().GetLocId(var.subpattern_id), + ExpectedSymbolicBindingInFieldDecl); + context.name_scopes() + .Get(context.classes().Get(class_scope->class_id).scope_id) + .set_has_error(); + } if (decl_info.init_id.has_value()) { // TODO: In a class scope, we should instead save the initializer // somewhere so that we can use it as a default. diff --git a/toolchain/check/handle_pattern_list.cpp b/toolchain/check/handle_pattern_list.cpp index 7e80e6434f4a..d9aa9fd0dde6 100644 --- a/toolchain/check/handle_pattern_list.cpp +++ b/toolchain/check/handle_pattern_list.cpp @@ -4,11 +4,14 @@ #include "toolchain/check/context.h" #include "toolchain/check/handle.h" +#include "toolchain/check/inst.h" #include "toolchain/check/subpattern.h" +#include "toolchain/check/type.h" namespace Carbon::Check { -auto HandleParseNode(Context& context, Parse::ImplicitParamListStartId node_id) +// Handle the start of any kind of pattern list. +static auto HandlePatternListStart(Context& context, Parse::NodeId node_id) -> bool { context.node_stack().Push(node_id); context.param_and_arg_refs_stack().Push(); @@ -16,34 +19,73 @@ auto HandleParseNode(Context& context, Parse::ImplicitParamListStartId node_id) return true; } +auto HandleParseNode(Context& context, Parse::ImplicitParamListStartId node_id) + -> bool { + return HandlePatternListStart(context, node_id); +} + +auto HandleParseNode(Context& context, Parse::TuplePatternStartId node_id) + -> bool { + return HandlePatternListStart(context, node_id); +} + +auto HandleParseNode(Context& context, Parse::ExplicitParamListStartId node_id) + -> bool { + context.full_pattern_stack().EndImplicitParamList(); + return HandlePatternListStart(context, node_id); +} + +// Handle the end of any kind of parameter list (tuple patterns have separate +// logic). +static auto HandleParamListEnd(Context& context, Parse::NodeId node_id, + Parse::NodeKind start_kind) -> bool { + if (context.node_stack().PeekIs(start_kind)) { + // End the subpattern started by a trailing comma, or the opening delimiter + // of an empty list. + EndSubpatternAsNonExpr(context); + } + // Note the Start node remains on the stack, where the param list handler can + // make use of it. + auto refs_id = context.param_and_arg_refs_stack().EndAndPop(start_kind); + context.node_stack().Push(node_id, refs_id); + return true; +} + auto HandleParseNode(Context& context, Parse::ImplicitParamListId node_id) -> bool { - if (context.node_stack().PeekIs(Parse::NodeKind::ImplicitParamListStart)) { - // End the subpattern started by a trailing comma, or the opening delimiter - // of an empty list. - EndSubpatternAsEmpty(context); - } - // Note the Start node remains on the stack, where the param list handler can - // make use of it. - auto refs_id = context.param_and_arg_refs_stack().EndAndPop( - Parse::NodeKind::ImplicitParamListStart); - context.node_stack().Push(node_id, refs_id); - // The implicit parameter list's scope extends to the end of the following - // parameter list. - return true; + return HandleParamListEnd(context, node_id, + Parse::NodeKind::ImplicitParamListStart); } -auto HandleParseNode(Context& context, Parse::TuplePatternStartId node_id) +auto HandleParseNode(Context& context, Parse::ExplicitParamListId node_id) -> bool { - context.node_stack().Push(node_id); - context.param_and_arg_refs_stack().Push(); - BeginSubpattern(context); - // TODO: Remove this branch once the parse tree differentiates between - // tuple patterns and param patterns. - if (context.full_pattern_stack().CurrentKind() == - FullPatternStack::Kind::ImplicitParamList) { - context.full_pattern_stack().EndImplicitParamList(); + return HandleParamListEnd(context, node_id, + Parse::NodeKind::ExplicitParamListStart); +} + +auto HandleParseNode(Context& context, Parse::TuplePatternId node_id) -> bool { + if (context.node_stack().PeekIs(Parse::NodeKind::TuplePatternStart)) { + // End the subpattern started by a trailing comma, or the opening delimiter + // of an empty list. + EndSubpatternAsNonExpr(context); } + auto refs_id = context.param_and_arg_refs_stack().EndAndPop( + Parse::NodeKind::TuplePatternStart); + context.node_stack() + .PopAndDiscardSoloNodeId(); + + const auto& inst_block = context.inst_blocks().Get(refs_id); + llvm::SmallVector type_ids; + type_ids.reserve(inst_block.size()); + for (auto inst : inst_block) { + type_ids.push_back(context.insts().Get(inst).type_id()); + } + auto type_id = GetTupleType(context, type_ids); + context.node_stack().Push( + node_id, + AddPatternInst( + context, node_id, {.type_id = type_id, .elements_id = refs_id})); + EndSubpatternAsNonExpr(context); return true; } @@ -54,18 +96,4 @@ auto HandleParseNode(Context& context, Parse::PatternListCommaId /*node_id*/) return true; } -auto HandleParseNode(Context& context, Parse::TuplePatternId node_id) -> bool { - if (context.node_stack().PeekIs(Parse::NodeKind::TuplePatternStart)) { - // End the subpattern started by a trailing comma, or the opening delimiter - // of an empty list. - EndSubpatternAsEmpty(context); - } - // Note the Start node remains on the stack, where the param list handler can - // make use of it. - auto refs_id = context.param_and_arg_refs_stack().EndAndPop( - Parse::NodeKind::TuplePatternStart); - context.node_stack().Push(node_id, refs_id); - return true; -} - } // namespace Carbon::Check diff --git a/toolchain/check/name_component.cpp b/toolchain/check/name_component.cpp index 0535c26783ad..83679bc18c90 100644 --- a/toolchain/check/name_component.cpp +++ b/toolchain/check/name_component.cpp @@ -16,11 +16,12 @@ auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id) // Explicit params. auto [params_loc_id, param_patterns_id] = - context.node_stack().PopWithNodeIdIf(); + context.node_stack() + .PopWithNodeIdIf(); if (param_patterns_id) { first_param_node_id = context.node_stack() - .PopForSoloNodeId(); + .PopForSoloNodeId(); last_param_node_id = params_loc_id; } else { param_patterns_id = SemIR::InstBlockId::None; diff --git a/toolchain/check/node_stack.h b/toolchain/check/node_stack.h index eb6f7b1f3bb6..fe05db6d3b07 100644 --- a/toolchain/check/node_stack.h +++ b/toolchain/check/node_stack.h @@ -373,8 +373,8 @@ class NodeStack { } }; - // TODO: Patterns should also produce an `InstId`, but currently - // `TuplePattern` produces an `InstBlockId`. + set_id_if_category_is(Parse::NodeCategory::Pattern, + Id::KindFor()); set_id_if_category_is(Parse::NodeCategory::Expr, Id::KindFor()); set_id_if_category_is(Parse::NodeCategory::MemberName | @@ -394,23 +394,18 @@ class NodeStack { static constexpr auto NodeKindToIdKindSpecialCases(Parse::NodeKind node_kind) -> std::optional { switch (node_kind) { - case Parse::NodeKind::Addr: case Parse::NodeKind::CallExprStart: - case Parse::NodeKind::CompileTimeBindingPattern: case Parse::NodeKind::IfExprThen: - case Parse::NodeKind::LetBindingPattern: case Parse::NodeKind::ReturnType: case Parse::NodeKind::ShortCircuitOperandAnd: case Parse::NodeKind::ShortCircuitOperandOr: case Parse::NodeKind::StructLiteralField: - case Parse::NodeKind::VarBindingPattern: - case Parse::NodeKind::VariablePattern: case Parse::NodeKind::WhereOperand: return Id::KindFor(); + case Parse::NodeKind::ExplicitParamList: case Parse::NodeKind::IfCondition: case Parse::NodeKind::IfExprIf: case Parse::NodeKind::ImplicitParamList: - case Parse::NodeKind::TuplePattern: case Parse::NodeKind::WhileCondition: case Parse::NodeKind::WhileConditionStart: return Id::KindFor(); @@ -436,6 +431,7 @@ class NodeStack { case Parse::NodeKind::ChoiceIntroducer: case Parse::NodeKind::ClassIntroducer: case Parse::NodeKind::CodeBlockStart: + case Parse::NodeKind::ExplicitParamListStart: case Parse::NodeKind::FunctionIntroducer: case Parse::NodeKind::IfStatementElse: case Parse::NodeKind::ImplicitParamListStart: diff --git a/toolchain/check/pattern_match.cpp b/toolchain/check/pattern_match.cpp index 548a9b48a608..ba6a29524742 100644 --- a/toolchain/check/pattern_match.cpp +++ b/toolchain/check/pattern_match.cpp @@ -14,6 +14,7 @@ #include "toolchain/check/convert.h" #include "toolchain/check/subpattern.h" #include "toolchain/check/type.h" +#include "toolchain/diagnostics/format_providers.h" namespace Carbon::Check { @@ -97,6 +98,29 @@ class MatchContext { // `ParamPattern` case. auto EmitPatternMatch(Context& context, MatchContext::WorkItem entry) -> void; + // Implementations of `EmitPatternMatch` for particular pattern inst kinds. + // The pattern argument is always equal to + // `context.insts().Get(entry.pattern_id)`, and `pattern_loc_id` is always + // equal to `context.insts().GetLocId(entry.pattern_id)`. + auto DoEmitPatternMatch(Context& context, + SemIR::AnyBindingPattern binding_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, SemIR::AddrPattern addr_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, + SemIR::ValueParamPattern param_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, + SemIR::OutParamPattern param_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, + SemIR::ReturnSlotPattern return_slot_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, SemIR::VarPattern var_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + auto DoEmitPatternMatch(Context& context, SemIR::TuplePattern tuple_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void; + // The stack of work to be processed. llvm::SmallVector stack_; @@ -172,6 +196,266 @@ static auto InsertHere(Context& context, SemIR::ExprRegionId region_id) return region.result_id; } +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::AnyBindingPattern binding_pattern, + SemIR::LocId /*pattern_loc_id*/, + MatchContext::WorkItem entry) -> void { + // We're logically consuming this map entry, so we invalidate it in order + // to avoid accidentally consuming it twice. + auto [bind_name_id, type_expr_region_id] = + std::exchange(context.bind_name_map().Lookup(entry.pattern_id).value(), + {.bind_name_id = SemIR::InstId::None, + .type_expr_region_id = SemIR::ExprRegionId::None}); + InsertHere(context, type_expr_region_id); + auto value_id = entry.scrutinee_id; + switch (kind_) { + case MatchKind::Local: { + value_id = ConvertToValueOrRefOfType( + context, context.insts().GetLocId(entry.scrutinee_id), + entry.scrutinee_id, binding_pattern.type_id); + break; + } + case MatchKind::Callee: { + if (context.insts() + .GetAs(value_id) + .runtime_index.has_value()) { + results_.push_back(value_id); + } + break; + } + case MatchKind::Caller: + CARBON_FATAL("Found binding pattern during caller pattern match"); + } + auto bind_name = context.insts().GetAs(bind_name_id); + CARBON_CHECK(!bind_name.value_id.has_value()); + bind_name.value_id = value_id; + ReplaceInstBeforeConstantUse(context, bind_name_id, bind_name); + context.inst_block_stack().AddInstId(bind_name_id); +} + +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::AddrPattern addr_pattern, + SemIR::LocId /*pattern_loc_id*/, + WorkItem entry) -> void { + CARBON_CHECK(kind_ != MatchKind::Local); + if (kind_ == MatchKind::Callee) { + // We're emitting pattern-match IR for the callee, but we're still on + // the caller side of the pattern, so we traverse without emitting any + // insts. + AddWork({.pattern_id = addr_pattern.inner_id, + .scrutinee_id = SemIR::InstId::None}); + return; + } + CARBON_CHECK(entry.scrutinee_id.has_value()); + auto scrutinee_ref_id = ConvertToValueOrRefExpr(context, entry.scrutinee_id); + switch (SemIR::GetExprCategory(context.sem_ir(), scrutinee_ref_id)) { + case SemIR::ExprCategory::Error: + case SemIR::ExprCategory::DurableRef: + case SemIR::ExprCategory::EphemeralRef: + break; + default: + CARBON_DIAGNOSTIC(AddrSelfIsNonRef, Error, + "`addr self` method cannot be invoked on a value"); + context.emitter().Emit( + TokenOnly(context.insts().GetLocId(entry.scrutinee_id)), + AddrSelfIsNonRef); + results_.push_back(SemIR::ErrorInst::SingletonInstId); + return; + } + auto scrutinee_ref = context.insts().Get(scrutinee_ref_id); + auto new_scrutinee = AddInst( + context, context.insts().GetLocId(scrutinee_ref_id), + {.type_id = GetPointerType(context, scrutinee_ref.type_id()), + .lvalue_id = scrutinee_ref_id}); + AddWork({.pattern_id = addr_pattern.inner_id, .scrutinee_id = new_scrutinee}); +} + +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::ValueParamPattern param_pattern, + SemIR::LocId pattern_loc_id, + WorkItem entry) -> void { + CARBON_CHECK(param_pattern.runtime_index.index < 0 || + static_cast(param_pattern.runtime_index.index) == + results_.size(), + "Parameters out of order; expecting {0} but got {1}", + results_.size(), param_pattern.runtime_index.index); + switch (kind_) { + case MatchKind::Caller: { + CARBON_CHECK(entry.scrutinee_id.has_value()); + if (entry.scrutinee_id == SemIR::ErrorInst::SingletonInstId) { + results_.push_back(SemIR::ErrorInst::SingletonInstId); + } else { + results_.push_back(ConvertToValueOfType( + context, context.insts().GetLocId(entry.scrutinee_id), + entry.scrutinee_id, + SemIR::GetTypeInSpecific(context.sem_ir(), callee_specific_id_, + param_pattern.type_id))); + } + // Do not traverse farther, because the caller side of the pattern + // ends here. + break; + } + case MatchKind::Callee: { + if (param_pattern.runtime_index == SemIR::RuntimeParamIndex::Unknown) { + param_pattern.runtime_index = NextRuntimeIndex(); + ReplaceInstBeforeConstantUse(context, entry.pattern_id, param_pattern); + } + AddWork({.pattern_id = param_pattern.subpattern_id, + .scrutinee_id = AddInst( + context, pattern_loc_id, + {.type_id = param_pattern.type_id, + .runtime_index = param_pattern.runtime_index, + .pretty_name_id = GetPrettyName(context, param_pattern)})}); + break; + } + case MatchKind::Local: { + CARBON_FATAL("Found ValueParamPattern during local pattern match"); + } + } +} + +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::OutParamPattern param_pattern, + SemIR::LocId pattern_loc_id, + WorkItem entry) -> void { + switch (kind_) { + case MatchKind::Caller: { + CARBON_CHECK(entry.scrutinee_id.has_value()); + CARBON_CHECK(context.insts().Get(entry.scrutinee_id).type_id() == + SemIR::GetTypeInSpecific(context.sem_ir(), + callee_specific_id_, + param_pattern.type_id)); + results_.push_back(entry.scrutinee_id); + // Do not traverse farther, because the caller side of the pattern + // ends here. + break; + } + case MatchKind::Callee: { + // TODO: Consider ways to address near-duplication with the + // ValueParamPattern case. + if (param_pattern.runtime_index == SemIR::RuntimeParamIndex::Unknown) { + param_pattern.runtime_index = NextRuntimeIndex(); + ReplaceInstBeforeConstantUse(context, entry.pattern_id, param_pattern); + } + AddWork({.pattern_id = param_pattern.subpattern_id, + .scrutinee_id = AddInst( + context, pattern_loc_id, + {.type_id = param_pattern.type_id, + .runtime_index = param_pattern.runtime_index, + .pretty_name_id = GetPrettyName(context, param_pattern)})}); + break; + } + case MatchKind::Local: { + CARBON_FATAL("Found OutParamPattern during local pattern match"); + } + } +} + +auto MatchContext::DoEmitPatternMatch( + Context& context, SemIR::ReturnSlotPattern return_slot_pattern, + SemIR::LocId pattern_loc_id, WorkItem entry) -> void { + CARBON_CHECK(kind_ == MatchKind::Callee); + auto return_slot_id = AddInst( + context, pattern_loc_id, + {.type_id = return_slot_pattern.type_id, + .type_inst_id = return_slot_pattern.type_inst_id, + .storage_id = entry.scrutinee_id}); + bool already_in_lookup = + context.scope_stack() + .LookupOrAddName(SemIR::NameId::ReturnSlot, return_slot_id) + .has_value(); + CARBON_CHECK(!already_in_lookup); + results_.push_back(entry.scrutinee_id); +} + +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::VarPattern var_pattern, + SemIR::LocId pattern_loc_id, + WorkItem entry) -> void { + auto var_id = context.var_storage_map().Lookup(entry.pattern_id).value(); + // TODO: Find a more efficient way to put these insts in the global_init + // block (or drop the distinction between the global_init block and the + // file scope?) + if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { + context.global_init().Resume(); + } + if (entry.scrutinee_id.has_value()) { + auto init_id = + Initialize(context, pattern_loc_id, var_id, entry.scrutinee_id); + // TODO: Consider using different instruction kinds for assignment + // versus initialization. + AddInst(context, pattern_loc_id, + {.lhs_id = var_id, .rhs_id = init_id}); + } + AddWork({.pattern_id = var_pattern.subpattern_id, .scrutinee_id = var_id}); + if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { + context.global_init().Suspend(); + } +} + +auto MatchContext::DoEmitPatternMatch(Context& context, + SemIR::TuplePattern tuple_pattern, + SemIR::LocId pattern_loc_id, + WorkItem entry) -> void { + if (tuple_pattern.type_id == SemIR::ErrorInst::SingletonTypeId) { + return; + } + auto subpattern_ids = context.inst_blocks().Get(tuple_pattern.elements_id); + auto add_all_subscrutinees = + [&](llvm::ArrayRef subscrutinee_ids) { + for (auto [subpattern_id, subscrutinee_id] : + llvm::reverse(llvm::zip(subpattern_ids, subscrutinee_ids))) { + AddWork( + {.pattern_id = subpattern_id, .scrutinee_id = subscrutinee_id}); + } + }; + if (!entry.scrutinee_id.has_value()) { + CARBON_CHECK(kind_ == MatchKind::Callee); + context.TODO(pattern_loc_id, + "Support patterns besides bindings in parameter list"); + return; + } + auto scrutinee = context.insts().GetWithLocId(entry.scrutinee_id); + if (auto scrutinee_literal = scrutinee.inst.TryAs()) { + auto subscrutinee_ids = + context.inst_blocks().Get(scrutinee_literal->elements_id); + if (subscrutinee_ids.size() != subpattern_ids.size()) { + CARBON_DIAGNOSTIC(TuplePatternSizeDoesntMatchLiteral, Error, + "tuple pattern expects {0} element{0:s}, but tuple " + "literal has {1}", + IntAsSelect, IntAsSelect); + context.emitter().Emit(pattern_loc_id, TuplePatternSizeDoesntMatchLiteral, + subpattern_ids.size(), subscrutinee_ids.size()); + return; + } + add_all_subscrutinees(subscrutinee_ids); + return; + } + + auto converted_scrutinee = ConvertToValueOrRefOfType( + context, pattern_loc_id, entry.scrutinee_id, tuple_pattern.type_id); + if (auto scrutinee_value = + context.insts().TryGetAs(converted_scrutinee)) { + add_all_subscrutinees( + context.inst_blocks().Get(scrutinee_value->elements_id)); + return; + } + + auto tuple_type = + context.types().GetAs(tuple_pattern.type_id); + auto element_type_ids = context.type_blocks().Get(tuple_type.elements_id); + llvm::SmallVector subscrutinee_ids; + subscrutinee_ids.reserve(element_type_ids.size()); + for (auto [i, element_type_id] : llvm::enumerate(element_type_ids)) { + subscrutinee_ids.push_back( + AddInst(context, scrutinee.loc_id, + {.type_id = element_type_id, + .tuple_id = entry.scrutinee_id, + .index = SemIR::ElementIndex(i)})); + } + add_all_subscrutinees(subscrutinee_ids); +} + auto MatchContext::EmitPatternMatch(Context& context, MatchContext::WorkItem entry) -> void { if (entry.pattern_id == SemIR::ErrorInst::SingletonInstId) { @@ -190,193 +474,32 @@ auto MatchContext::EmitPatternMatch(Context& context, CARBON_KIND_SWITCH(pattern.inst) { case SemIR::BindingPattern::Kind: case SemIR::SymbolicBindingPattern::Kind: { - auto binding_pattern = pattern.inst.As(); - // We're logically consuming this map entry, so we invalidate it in order - // to avoid accidentally consuming it twice. - auto [bind_name_id, type_expr_region_id] = std::exchange( - context.bind_name_map().Lookup(entry.pattern_id).value(), - {.bind_name_id = SemIR::InstId::None, - .type_expr_region_id = SemIR::ExprRegionId::None}); - InsertHere(context, type_expr_region_id); - auto value_id = entry.scrutinee_id; - switch (kind_) { - case MatchKind::Local: { - value_id = ConvertToValueOrRefOfType( - context, context.insts().GetLocId(entry.scrutinee_id), - entry.scrutinee_id, binding_pattern.type_id); - break; - } - case MatchKind::Callee: { - if (context.insts() - .GetAs(value_id) - .runtime_index.has_value()) { - results_.push_back(value_id); - } - break; - } - case MatchKind::Caller: - CARBON_FATAL("Found binding pattern during caller pattern match"); - } - auto bind_name = context.insts().GetAs(bind_name_id); - CARBON_CHECK(!bind_name.value_id.has_value()); - bind_name.value_id = value_id; - ReplaceInstBeforeConstantUse(context, bind_name_id, bind_name); - context.inst_block_stack().AddInstId(bind_name_id); + DoEmitPatternMatch(context, pattern.inst.As(), + pattern.loc_id, entry); break; } case CARBON_KIND(SemIR::AddrPattern addr_pattern): { - CARBON_CHECK(kind_ != MatchKind::Local); - if (kind_ == MatchKind::Callee) { - // We're emitting pattern-match IR for the callee, but we're still on - // the caller side of the pattern, so we traverse without emitting any - // insts. - AddWork({.pattern_id = addr_pattern.inner_id, - .scrutinee_id = SemIR::InstId::None}); - break; - } - CARBON_CHECK(entry.scrutinee_id.has_value()); - auto scrutinee_ref_id = - ConvertToValueOrRefExpr(context, entry.scrutinee_id); - switch (SemIR::GetExprCategory(context.sem_ir(), scrutinee_ref_id)) { - case SemIR::ExprCategory::Error: - case SemIR::ExprCategory::DurableRef: - case SemIR::ExprCategory::EphemeralRef: - break; - default: - CARBON_DIAGNOSTIC(AddrSelfIsNonRef, Error, - "`addr self` method cannot be invoked on a value"); - context.emitter().Emit( - TokenOnly(context.insts().GetLocId(entry.scrutinee_id)), - AddrSelfIsNonRef); - results_.push_back(SemIR::ErrorInst::SingletonInstId); - return; - } - auto scrutinee_ref = context.insts().Get(scrutinee_ref_id); - auto new_scrutinee = AddInst( - context, context.insts().GetLocId(scrutinee_ref_id), - {.type_id = GetPointerType(context, scrutinee_ref.type_id()), - .lvalue_id = scrutinee_ref_id}); - AddWork( - {.pattern_id = addr_pattern.inner_id, .scrutinee_id = new_scrutinee}); + DoEmitPatternMatch(context, addr_pattern, pattern.loc_id, entry); break; } case CARBON_KIND(SemIR::ValueParamPattern param_pattern): { - CARBON_CHECK(param_pattern.runtime_index.index < 0 || - static_cast(param_pattern.runtime_index.index) == - results_.size(), - "Parameters out of order; expecting {0} but got {1}", - results_.size(), param_pattern.runtime_index.index); - switch (kind_) { - case MatchKind::Caller: { - CARBON_CHECK(entry.scrutinee_id.has_value()); - if (entry.scrutinee_id == SemIR::ErrorInst::SingletonInstId) { - results_.push_back(SemIR::ErrorInst::SingletonInstId); - } else { - results_.push_back(ConvertToValueOfType( - context, context.insts().GetLocId(entry.scrutinee_id), - entry.scrutinee_id, - SemIR::GetTypeInSpecific(context.sem_ir(), callee_specific_id_, - param_pattern.type_id))); - } - // Do not traverse farther, because the caller side of the pattern - // ends here. - break; - } - case MatchKind::Callee: { - if (param_pattern.runtime_index == - SemIR::RuntimeParamIndex::Unknown) { - param_pattern.runtime_index = NextRuntimeIndex(); - ReplaceInstBeforeConstantUse(context, entry.pattern_id, - param_pattern); - } - AddWork( - {.pattern_id = param_pattern.subpattern_id, - .scrutinee_id = AddInst( - context, pattern.loc_id, - {.type_id = param_pattern.type_id, - .runtime_index = param_pattern.runtime_index, - .pretty_name_id = GetPrettyName(context, param_pattern)})}); - break; - } - case MatchKind::Local: { - CARBON_FATAL("Found ValueParamPattern during local pattern match"); - } - } + DoEmitPatternMatch(context, param_pattern, pattern.loc_id, entry); break; } case CARBON_KIND(SemIR::OutParamPattern param_pattern): { - switch (kind_) { - case MatchKind::Caller: { - CARBON_CHECK(entry.scrutinee_id.has_value()); - CARBON_CHECK(context.insts().Get(entry.scrutinee_id).type_id() == - SemIR::GetTypeInSpecific(context.sem_ir(), - callee_specific_id_, - param_pattern.type_id)); - results_.push_back(entry.scrutinee_id); - // Do not traverse farther, because the caller side of the pattern - // ends here. - break; - } - case MatchKind::Callee: { - // TODO: Consider ways to address near-duplication with the - // ValueParamPattern case. - if (param_pattern.runtime_index == - SemIR::RuntimeParamIndex::Unknown) { - param_pattern.runtime_index = NextRuntimeIndex(); - ReplaceInstBeforeConstantUse(context, entry.pattern_id, - param_pattern); - } - AddWork( - {.pattern_id = param_pattern.subpattern_id, - .scrutinee_id = AddInst( - context, pattern.loc_id, - {.type_id = param_pattern.type_id, - .runtime_index = param_pattern.runtime_index, - .pretty_name_id = GetPrettyName(context, param_pattern)})}); - break; - } - case MatchKind::Local: { - CARBON_FATAL("Found OutParamPattern during local pattern match"); - } - } + DoEmitPatternMatch(context, param_pattern, pattern.loc_id, entry); break; } case CARBON_KIND(SemIR::ReturnSlotPattern return_slot_pattern): { - CARBON_CHECK(kind_ == MatchKind::Callee); - auto return_slot_id = AddInst( - context, pattern.loc_id, - {.type_id = return_slot_pattern.type_id, - .type_inst_id = return_slot_pattern.type_inst_id, - .storage_id = entry.scrutinee_id}); - bool already_in_lookup = - context.scope_stack() - .LookupOrAddName(SemIR::NameId::ReturnSlot, return_slot_id) - .has_value(); - CARBON_CHECK(!already_in_lookup); - results_.push_back(entry.scrutinee_id); + DoEmitPatternMatch(context, return_slot_pattern, pattern.loc_id, entry); break; } case CARBON_KIND(SemIR::VarPattern var_pattern): { - auto var_id = context.var_storage_map().Lookup(entry.pattern_id).value(); - // TODO: Find a more efficient way to put these insts in the global_init - // block (or drop the distinction between the global_init block and the - // file scope?) - if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { - context.global_init().Resume(); - } - if (entry.scrutinee_id.has_value()) { - auto init_id = - Initialize(context, pattern.loc_id, var_id, entry.scrutinee_id); - // TODO: Consider using different instruction kinds for assignment - // versus initialization. - AddInst(context, pattern.loc_id, - {.lhs_id = var_id, .rhs_id = init_id}); - } - AddWork( - {.pattern_id = var_pattern.subpattern_id, .scrutinee_id = var_id}); - if (context.scope_stack().PeekIndex() == ScopeIndex::Package) { - context.global_init().Suspend(); - } + DoEmitPatternMatch(context, var_pattern, pattern.loc_id, entry); + break; + } + case CARBON_KIND(SemIR::TuplePattern tuple_pattern): { + DoEmitPatternMatch(context, tuple_pattern, pattern.loc_id, entry); break; } default: { diff --git a/toolchain/check/subpattern.cpp b/toolchain/check/subpattern.cpp index c400c92f23b0..dac74acf6fe5 100644 --- a/toolchain/check/subpattern.cpp +++ b/toolchain/check/subpattern.cpp @@ -35,11 +35,13 @@ auto EndSubpatternAsExpr(Context& context, SemIR::InstId result_id) .result_id = result_id}); } -auto EndSubpatternAsEmpty(Context& context) -> void { +auto EndSubpatternAsNonExpr(Context& context) -> void { auto block_id = context.inst_block_stack().Pop(); CARBON_CHECK(block_id == context.region_stack().PeekRegion().back()); CARBON_CHECK(context.region_stack().PeekRegion().size() == 1); - CARBON_CHECK(context.inst_blocks().Get(block_id).empty()); + // TODO: Add `CARBON_CHECK(inst_blocks().Get(block_id).empty())`. + // Currently that can fail when ending a tuple pattern in a name binding + // decl in a class or interface. context.region_stack().PopAndDiscardRegion(); } diff --git a/toolchain/check/subpattern.h b/toolchain/check/subpattern.h index 43856fa00e8a..56bbb892487f 100644 --- a/toolchain/check/subpattern.h +++ b/toolchain/check/subpattern.h @@ -24,8 +24,8 @@ auto EndSubpatternAsExpr(Context& context, SemIR::InstId result_id) -> SemIR::ExprRegionId; // Ends a region started by BeginSubpattern (in stack order), asserting that -// it was empty. -auto EndSubpatternAsEmpty(Context& context) -> void; +// it had no expression content. +auto EndSubpatternAsNonExpr(Context& context) -> void; // TODO: Add EndSubpatternAsPattern, when needed. diff --git a/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon b/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon index 8a188061935b..6d77622a9b11 100644 --- a/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon +++ b/toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon @@ -8,17 +8,42 @@ // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/function/declaration/no_prelude/fail_pattern_in_signature.carbon -// CHECK:STDERR: fail_pattern_in_signature.carbon:[[@LINE+8]]:6: error: expected name in binding pattern [ExpectedBindingPattern] +// CHECK:STDERR: fail_pattern_in_signature.carbon:[[@LINE+4]]:6: error: semantics TODO: `Support patterns besides bindings in parameter list` [SemanticsTodo] // CHECK:STDERR: fn F((a: {}, b: {}), c: {}); -// CHECK:STDERR: ^ -// CHECK:STDERR: -// CHECK:STDERR: fail_pattern_in_signature.carbon:[[@LINE+4]]:6: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] -// CHECK:STDERR: fn F((a: {}, b: {}), c: {}); -// CHECK:STDERR: ^ +// CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fn F((a: {}, b: {}), c: {}); // CHECK:STDOUT: --- fail_pattern_in_signature.carbon // CHECK:STDOUT: -// CHECK:STDOUT: file {} +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .F = %F.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { +// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a +// CHECK:STDOUT: %a.param_patt: %empty_struct_type = value_param_pattern %a.patt, runtime_param +// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b +// CHECK:STDOUT: %b.param_patt: %empty_struct_type = value_param_pattern %b.patt, runtime_param +// CHECK:STDOUT: %.loc15_19: %tuple.type = tuple_pattern (%a.param_patt, %b.param_patt) +// CHECK:STDOUT: %c.patt: %empty_struct_type = binding_pattern c +// CHECK:STDOUT: %c.param_patt: %empty_struct_type = value_param_pattern %c.patt, runtime_param0 +// CHECK:STDOUT: } { +// CHECK:STDOUT: %c.param: %empty_struct_type = value_param runtime_param0 +// CHECK:STDOUT: %.loc15_26.1: type = splice_block %.loc15_26.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc15_26.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc15_26.3: type = converted %.loc15_26.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %c: %empty_struct_type = bind_name c, %c.param +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F(%.loc15_19: %tuple.type, %c.param_patt: %empty_struct_type); // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon index cf1791697431..ecc8a4d1bf82 100644 --- a/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon +++ b/toolchain/check/testdata/interface/no_prelude/fail_assoc_const_not_binding.carbon @@ -13,7 +13,7 @@ library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_tuple_pattern.carbon:[[@LINE+4]]:7: error: semantics TODO: `tuple pattern in let/var` [SemanticsTodo] + // CHECK:STDERR: fail_tuple_pattern.carbon:[[@LINE+4]]:7: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] // CHECK:STDERR: let (T:! type, U:! type); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: @@ -25,7 +25,7 @@ interface I { library "[[@TEST_NAME]]"; interface I { - // CHECK:STDERR: fail_tuple_pattern_with_default.carbon:[[@LINE+4]]:15: error: semantics TODO: `tuple pattern in let/var` [SemanticsTodo] + // CHECK:STDERR: fail_tuple_pattern_with_default.carbon:[[@LINE+4]]:15: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] // CHECK:STDERR: default let (T:! type, U:! type) = ({}, {}); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: diff --git a/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon b/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon new file mode 100644 index 000000000000..bc3d3a6a991f --- /dev/null +++ b/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon @@ -0,0 +1,577 @@ +// 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/check/testdata/tuple/no_prelude/tuple_pattern.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon + + +// --- basic.carbon + +library "[[@TEST_NAME]]"; + +fn F() { + let (x: {}, y: {}) = ({}, {}); + var (a: {}, b: {}); + var (c: {}, d: {}) = ({}, {}); +} + +// --- variable.carbon + +library "[[@TEST_NAME]]"; + +fn F() { + var tuple: ({}, {}) = ({}, {}); + var (x: {}, y: {}) = tuple; +} + +fn G() { + let tuple: ({}, {}) = ({}, {}); + var (x: {}, y: {}) = tuple; +} + +fn MakeTuple() -> ({}, {}); + +fn H() { + var (x: {}, y: {}) = MakeTuple(); +} + +// --- nested.carbon + +library "[[@TEST_NAME]]"; + +fn F() { + let (x: {}, (y: {}, z: {})) = ({}, ({}, {})); +} + +// --- package_scope.carbon + +library "[[@TEST_NAME]]"; + +let (x: {}, y: {}) = ({}, {}); + +// --- fail_in_interface.carbon + +library "[[@TEST_NAME]]"; + +interface I { + // CHECK:STDERR: fail_in_interface.carbon:[[@LINE+4]]:7: error: pattern in associated constant declaration must be a single `:!` binding [ExpectedSymbolicBindingInAssociatedConstant] + // CHECK:STDERR: let (x: {}, y: {}); + // CHECK:STDERR: ^~~~~~~~~~~~~~ + // CHECK:STDERR: + let (x: {}, y: {}); +} + +// --- fail_in_class.carbon + +library "[[@TEST_NAME]]"; + +class C { + // CHECK:STDERR: fail_in_class.carbon:[[@LINE+4]]:7: error: pattern in field declaration is not a single `:` binding [ExpectedSymbolicBindingInFieldDecl] + // CHECK:STDERR: var (x: {}, y: {}); + // CHECK:STDERR: ^~~~~~~~~~~~~~ + // CHECK:STDERR: + var (x: {}, y: {}); +} + +// --- fail_initializer_mismatch.carbon + +library "[[@TEST_NAME]]"; + +// CHECK:STDERR: fail_initializer_mismatch.carbon:[[@LINE+4]]:5: error: tuple pattern expects 2 elements, but tuple literal has 1 [TuplePatternSizeDoesntMatchLiteral] +// CHECK:STDERR: let (x: {}, y: {}) = ({},); +// CHECK:STDERR: ^~~~~~~~~~~~~~ +// CHECK:STDERR: +let (x: {}, y: {}) = ({},); + +// CHECK:STDERR: fail_initializer_mismatch.carbon:[[@LINE+4]]:5: error: tuple pattern expects 2 elements, but tuple literal has 3 [TuplePatternSizeDoesntMatchLiteral] +// CHECK:STDERR: let (a: {}, b: {}) = ({}, {}, {}); +// CHECK:STDERR: ^~~~~~~~~~~~~~ +// CHECK:STDERR: +let (a: {}, b: {}) = ({}, {}, {}); + +// CHECK:STDOUT: --- basic.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .F = %F.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc5_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: } +// CHECK:STDOUT: %.loc5_26.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_30.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_31: %tuple.type.b6b = tuple_literal (%.loc5_26.1, %.loc5_30.1) +// CHECK:STDOUT: %.loc5_12.1: type = splice_block %.loc5_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc5_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_12.3: type = converted %.loc5_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_26: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_26.2: %empty_struct_type = converted %.loc5_26.1, %empty_struct.loc5_26 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %x: %empty_struct_type = bind_name x, %.loc5_26.2 +// CHECK:STDOUT: %.loc5_19.1: type = splice_block %.loc5_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc5_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_19.3: type = converted %.loc5_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_30: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_30.2: %empty_struct_type = converted %.loc5_30.1, %empty_struct.loc5_30 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %y: %empty_struct_type = bind_name y, %.loc5_30.2 +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a +// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b +// CHECK:STDOUT: %.loc6_20: %tuple.type.b6b = tuple_pattern (%a.patt, %b.patt) +// CHECK:STDOUT: %.loc6_3: %tuple.type.b6b = var_pattern %.loc6_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var.loc6: ref %tuple.type.b6b = var +// CHECK:STDOUT: %tuple.elem0.loc6: ref %empty_struct_type = tuple_access %.var.loc6, element0 +// CHECK:STDOUT: %tuple.elem1.loc6: ref %empty_struct_type = tuple_access %.var.loc6, element1 +// CHECK:STDOUT: %.loc6_12.1: type = splice_block %.loc6_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc6_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc6_12.3: type = converted %.loc6_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %a: ref %empty_struct_type = bind_name a, %tuple.elem0.loc6 +// CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc6_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc6_19.3: type = converted %.loc6_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %b: ref %empty_struct_type = bind_name b, %tuple.elem1.loc6 +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %c.patt: %empty_struct_type = binding_pattern c +// CHECK:STDOUT: %d.patt: %empty_struct_type = binding_pattern d +// CHECK:STDOUT: %.loc7_20: %tuple.type.b6b = tuple_pattern (%c.patt, %d.patt) +// CHECK:STDOUT: %.loc7_3.1: %tuple.type.b6b = var_pattern %.loc7_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var.loc7: ref %tuple.type.b6b = var +// CHECK:STDOUT: %.loc7_26.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc7_30.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc7_31.1: %tuple.type.b6b = tuple_literal (%.loc7_26.1, %.loc7_30.1) +// CHECK:STDOUT: %tuple.elem0.loc7_31: ref %empty_struct_type = tuple_access %.var.loc7, element0 +// CHECK:STDOUT: %.loc7_26.2: init %empty_struct_type = struct_init () to %tuple.elem0.loc7_31 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_31.2: init %empty_struct_type = converted %.loc7_26.1, %.loc7_26.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.elem1.loc7_31: ref %empty_struct_type = tuple_access %.var.loc7, element1 +// CHECK:STDOUT: %.loc7_30.2: init %empty_struct_type = struct_init () to %tuple.elem1.loc7_31 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_31.3: init %empty_struct_type = converted %.loc7_30.1, %.loc7_30.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc7_31.4: init %tuple.type.b6b = tuple_init (%.loc7_31.2, %.loc7_31.3) to %.var.loc7 [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc7_3.2: init %tuple.type.b6b = converted %.loc7_31.1, %.loc7_31.4 [concrete = constants.%tuple] +// CHECK:STDOUT: assign %.var.loc7, %.loc7_3.2 +// CHECK:STDOUT: %tuple.elem0.loc7_3: ref %empty_struct_type = tuple_access %.var.loc7, element0 +// CHECK:STDOUT: %tuple.elem1.loc7_3: ref %empty_struct_type = tuple_access %.var.loc7, element1 +// CHECK:STDOUT: %.loc7_12.1: type = splice_block %.loc7_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc7_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc7_12.3: type = converted %.loc7_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %c: ref %empty_struct_type = bind_name c, %tuple.elem0.loc7_3 +// CHECK:STDOUT: %.loc7_19.1: type = splice_block %.loc7_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc7_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc7_19.3: type = converted %.loc7_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %d: ref %empty_struct_type = bind_name d, %tuple.elem1.loc7_3 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- variable.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: %tuple: %tuple.type.b6b = tuple_value (%empty_struct, %empty_struct) [concrete] +// CHECK:STDOUT: %G.type: type = fn_type @G [concrete] +// CHECK:STDOUT: %G: %G.type = struct_value () [concrete] +// CHECK:STDOUT: %MakeTuple.type: type = fn_type @MakeTuple [concrete] +// CHECK:STDOUT: %MakeTuple: %MakeTuple.type = struct_value () [concrete] +// CHECK:STDOUT: %H.type: type = fn_type @H [concrete] +// CHECK:STDOUT: %H: %H.type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .F = %F.decl +// CHECK:STDOUT: .G = %G.decl +// CHECK:STDOUT: .MakeTuple = %MakeTuple.decl +// CHECK:STDOUT: .H = %H.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} +// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} +// CHECK:STDOUT: %MakeTuple.decl: %MakeTuple.type = fn_decl @MakeTuple [concrete = constants.%MakeTuple] { +// CHECK:STDOUT: %return.patt: %tuple.type.b6b = return_slot_pattern +// CHECK:STDOUT: %return.param_patt: %tuple.type.b6b = out_param_pattern %return.patt, runtime_param0 +// CHECK:STDOUT: } { +// CHECK:STDOUT: %.loc14_21: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc14_25: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc14_26.1: %tuple.type.b6b = tuple_literal (%.loc14_21, %.loc14_25) +// CHECK:STDOUT: %.loc14_26.2: type = converted %.loc14_21, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc14_26.3: type = converted %.loc14_25, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc14_26.4: type = converted %.loc14_26.1, constants.%tuple.type.b6b [concrete = constants.%tuple.type.b6b] +// CHECK:STDOUT: %return.param: ref %tuple.type.b6b = out_param runtime_param0 +// CHECK:STDOUT: %return: ref %tuple.type.b6b = return_slot %return.param +// CHECK:STDOUT: } +// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %tuple.patt: %tuple.type.b6b = binding_pattern tuple +// CHECK:STDOUT: %.loc5_3.1: %tuple.type.b6b = var_pattern %tuple.patt +// CHECK:STDOUT: } +// CHECK:STDOUT: %tuple.var: ref %tuple.type.b6b = var tuple +// CHECK:STDOUT: %.loc5_27.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_31.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_32.1: %tuple.type.b6b = tuple_literal (%.loc5_27.1, %.loc5_31.1) +// CHECK:STDOUT: %tuple.elem0.loc5: ref %empty_struct_type = tuple_access %tuple.var, element0 +// CHECK:STDOUT: %.loc5_27.2: init %empty_struct_type = struct_init () to %tuple.elem0.loc5 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_32.2: init %empty_struct_type = converted %.loc5_27.1, %.loc5_27.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.elem1.loc5: ref %empty_struct_type = tuple_access %tuple.var, element1 +// CHECK:STDOUT: %.loc5_31.2: init %empty_struct_type = struct_init () to %tuple.elem1.loc5 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_32.3: init %empty_struct_type = converted %.loc5_31.1, %.loc5_31.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_32.4: init %tuple.type.b6b = tuple_init (%.loc5_32.2, %.loc5_32.3) to %tuple.var [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc5_3.2: init %tuple.type.b6b = converted %.loc5_32.1, %.loc5_32.4 [concrete = constants.%tuple] +// CHECK:STDOUT: assign %tuple.var, %.loc5_3.2 +// CHECK:STDOUT: %.loc5_21.1: type = splice_block %.loc5_21.5 [concrete = constants.%tuple.type.b6b] { +// CHECK:STDOUT: %.loc5_16: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_20: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_21.2: %tuple.type.b6b = tuple_literal (%.loc5_16, %.loc5_20) +// CHECK:STDOUT: %.loc5_21.3: type = converted %.loc5_16, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc5_21.4: type = converted %.loc5_20, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc5_21.5: type = converted %.loc5_21.2, constants.%tuple.type.b6b [concrete = constants.%tuple.type.b6b] +// CHECK:STDOUT: } +// CHECK:STDOUT: %tuple: ref %tuple.type.b6b = bind_name tuple, %tuple.var +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc6_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc6_3.1: %tuple.type.b6b = var_pattern %.loc6_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var: ref %tuple.type.b6b = var +// CHECK:STDOUT: %tuple.ref: ref %tuple.type.b6b = name_ref tuple, %tuple +// CHECK:STDOUT: %tuple.elem0.loc6_24.1: ref %empty_struct_type = tuple_access %tuple.ref, element0 +// CHECK:STDOUT: %tuple.elem0.loc6_24.2: ref %empty_struct_type = tuple_access %.var, element0 +// CHECK:STDOUT: %.loc6_24.1: init %empty_struct_type = struct_init () to %tuple.elem0.loc6_24.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_24.2: init %empty_struct_type = converted %tuple.elem0.loc6_24.1, %.loc6_24.1 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.elem1.loc6_24.1: ref %empty_struct_type = tuple_access %tuple.ref, element1 +// CHECK:STDOUT: %tuple.elem1.loc6_24.2: ref %empty_struct_type = tuple_access %.var, element1 +// CHECK:STDOUT: %.loc6_24.3: init %empty_struct_type = struct_init () to %tuple.elem1.loc6_24.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_24.4: init %empty_struct_type = converted %tuple.elem1.loc6_24.1, %.loc6_24.3 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc6_24.5: init %tuple.type.b6b = tuple_init (%.loc6_24.2, %.loc6_24.4) to %.var [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc6_3.2: init %tuple.type.b6b = converted %tuple.ref, %.loc6_24.5 [concrete = constants.%tuple] +// CHECK:STDOUT: assign %.var, %.loc6_3.2 +// CHECK:STDOUT: %tuple.elem0.loc6_3: ref %empty_struct_type = tuple_access %.var, element0 +// CHECK:STDOUT: %tuple.elem1.loc6_3: ref %empty_struct_type = tuple_access %.var, element1 +// CHECK:STDOUT: %.loc6_12.1: type = splice_block %.loc6_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc6_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc6_12.3: type = converted %.loc6_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x: ref %empty_struct_type = bind_name x, %tuple.elem0.loc6_3 +// CHECK:STDOUT: %.loc6_19.1: type = splice_block %.loc6_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc6_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc6_19.3: type = converted %.loc6_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %y: ref %empty_struct_type = bind_name y, %tuple.elem1.loc6_3 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @G() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %tuple.patt: %tuple.type.b6b = binding_pattern tuple +// CHECK:STDOUT: } +// CHECK:STDOUT: %.loc10_27: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_31: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_32.1: %tuple.type.b6b = tuple_literal (%.loc10_27, %.loc10_31) +// CHECK:STDOUT: %.loc10_21.1: type = splice_block %.loc10_21.5 [concrete = constants.%tuple.type.b6b] { +// CHECK:STDOUT: %.loc10_16: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_20: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_21.2: %tuple.type.b6b = tuple_literal (%.loc10_16, %.loc10_20) +// CHECK:STDOUT: %.loc10_21.3: type = converted %.loc10_16, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc10_21.4: type = converted %.loc10_20, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: %.loc10_21.5: type = converted %.loc10_21.2, constants.%tuple.type.b6b [concrete = constants.%tuple.type.b6b] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc10_27: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc10_32.2: %empty_struct_type = converted %.loc10_27, %empty_struct.loc10_27 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %empty_struct.loc10_31: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc10_32.3: %empty_struct_type = converted %.loc10_31, %empty_struct.loc10_31 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.loc10_32: %tuple.type.b6b = tuple_value (%.loc10_32.2, %.loc10_32.3) [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc10_32.4: %tuple.type.b6b = converted %.loc10_32.1, %tuple.loc10_32 [concrete = constants.%tuple] +// CHECK:STDOUT: %tuple.loc10_7: %tuple.type.b6b = bind_name tuple, %.loc10_32.4 +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc11_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc11_3.1: %tuple.type.b6b = var_pattern %.loc11_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var: ref %tuple.type.b6b = var +// CHECK:STDOUT: %tuple.ref: %tuple.type.b6b = name_ref tuple, %tuple.loc10_7 +// CHECK:STDOUT: %tuple.elem0.loc11_24.1: %empty_struct_type = tuple_access %tuple.ref, element0 +// CHECK:STDOUT: %tuple.elem0.loc11_24.2: ref %empty_struct_type = tuple_access %.var, element0 +// CHECK:STDOUT: %.loc11_24.1: init %empty_struct_type = struct_init () to %tuple.elem0.loc11_24.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc11_24.2: init %empty_struct_type = converted %tuple.elem0.loc11_24.1, %.loc11_24.1 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %tuple.elem1.loc11_24.1: %empty_struct_type = tuple_access %tuple.ref, element1 +// CHECK:STDOUT: %tuple.elem1.loc11_24.2: ref %empty_struct_type = tuple_access %.var, element1 +// CHECK:STDOUT: %.loc11_24.3: init %empty_struct_type = struct_init () to %tuple.elem1.loc11_24.2 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc11_24.4: init %empty_struct_type = converted %tuple.elem1.loc11_24.1, %.loc11_24.3 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc11_24.5: init %tuple.type.b6b = tuple_init (%.loc11_24.2, %.loc11_24.4) to %.var [concrete = constants.%tuple] +// CHECK:STDOUT: %.loc11_3.2: init %tuple.type.b6b = converted %tuple.ref, %.loc11_24.5 [concrete = constants.%tuple] +// CHECK:STDOUT: assign %.var, %.loc11_3.2 +// CHECK:STDOUT: %tuple.elem0.loc11_3: ref %empty_struct_type = tuple_access %.var, element0 +// CHECK:STDOUT: %tuple.elem1.loc11_3: ref %empty_struct_type = tuple_access %.var, element1 +// CHECK:STDOUT: %.loc11_12.1: type = splice_block %.loc11_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc11_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc11_12.3: type = converted %.loc11_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x: ref %empty_struct_type = bind_name x, %tuple.elem0.loc11_3 +// CHECK:STDOUT: %.loc11_19.1: type = splice_block %.loc11_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc11_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc11_19.3: type = converted %.loc11_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %y: ref %empty_struct_type = bind_name y, %tuple.elem1.loc11_3 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @MakeTuple() -> %tuple.type.b6b; +// CHECK:STDOUT: +// CHECK:STDOUT: fn @H() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc17_20: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: %.loc17_3.1: %tuple.type.b6b = var_pattern %.loc17_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var: ref %tuple.type.b6b = var +// CHECK:STDOUT: %MakeTuple.ref: %MakeTuple.type = name_ref MakeTuple, file.%MakeTuple.decl [concrete = constants.%MakeTuple] +// CHECK:STDOUT: %.loc17_3.2: ref %tuple.type.b6b = splice_block %.var {} +// CHECK:STDOUT: %MakeTuple.call: init %tuple.type.b6b = call %MakeTuple.ref() to %.loc17_3.2 +// CHECK:STDOUT: assign %.var, %MakeTuple.call +// CHECK:STDOUT: %tuple.elem0: ref %empty_struct_type = tuple_access %.var, element0 +// CHECK:STDOUT: %tuple.elem1: ref %empty_struct_type = tuple_access %.var, element1 +// CHECK:STDOUT: %.loc17_12.1: type = splice_block %.loc17_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc17_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc17_12.3: type = converted %.loc17_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x: ref %empty_struct_type = bind_name x, %tuple.elem0 +// CHECK:STDOUT: %.loc17_19.1: type = splice_block %.loc17_19.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc17_19.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc17_19.3: type = converted %.loc17_19.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %y: ref %empty_struct_type = bind_name y, %tuple.elem1 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- nested.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] +// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %tuple.type.6ca: type = tuple_type (%empty_struct_type, %tuple.type.b6b) [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .F = %F.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %z.patt: %empty_struct_type = binding_pattern z +// CHECK:STDOUT: %.loc5_28: %tuple.type.b6b = tuple_pattern (%y.patt, %z.patt) +// CHECK:STDOUT: %.loc5_29: %tuple.type.6ca = tuple_pattern (%x.patt, %.loc5_28) +// CHECK:STDOUT: } +// CHECK:STDOUT: %.loc5_35.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_40.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_44.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_45: %tuple.type.b6b = tuple_literal (%.loc5_40.1, %.loc5_44.1) +// CHECK:STDOUT: %.loc5_46: %tuple.type.6ca = tuple_literal (%.loc5_35.1, %.loc5_45) +// CHECK:STDOUT: %.loc5_12.1: type = splice_block %.loc5_12.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc5_12.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_12.3: type = converted %.loc5_12.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_35: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_35.2: %empty_struct_type = converted %.loc5_35.1, %empty_struct.loc5_35 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %x: %empty_struct_type = bind_name x, %.loc5_35.2 +// CHECK:STDOUT: %.loc5_20.1: type = splice_block %.loc5_20.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc5_20.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_20.3: type = converted %.loc5_20.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_40: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_40.2: %empty_struct_type = converted %.loc5_40.1, %empty_struct.loc5_40 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %y: %empty_struct_type = bind_name y, %.loc5_40.2 +// CHECK:STDOUT: %.loc5_27.1: type = splice_block %.loc5_27.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc5_27.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_27.3: type = converted %.loc5_27.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc5_44: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc5_44.2: %empty_struct_type = converted %.loc5_44.1, %empty_struct.loc5_44 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %z: %empty_struct_type = bind_name z, %.loc5_44.2 +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- package_scope.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .x = %x +// CHECK:STDOUT: .y = %y +// CHECK:STDOUT: } +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc4_18: %tuple.type = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: } +// CHECK:STDOUT: %.loc4_10.1: type = splice_block %.loc4_10.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc4_10.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc4_10.3: type = converted %.loc4_10.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc4_24: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc4_24: %empty_struct_type = converted @__global_init.%.loc4_24, %empty_struct.loc4_24 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %x: %empty_struct_type = bind_name x, %.loc4_24 +// CHECK:STDOUT: %.loc4_17.1: type = splice_block %.loc4_17.3 [concrete = constants.%empty_struct_type] { +// CHECK:STDOUT: %.loc4_17.2: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc4_17.3: type = converted %.loc4_17.2, constants.%empty_struct_type [concrete = constants.%empty_struct_type] +// CHECK:STDOUT: } +// CHECK:STDOUT: %empty_struct.loc4_28: %empty_struct_type = struct_value () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc4_28: %empty_struct_type = converted @__global_init.%.loc4_28, %empty_struct.loc4_28 [concrete = constants.%empty_struct] +// CHECK:STDOUT: %y: %empty_struct_type = bind_name y, %.loc4_28 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %.loc4_24: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc4_28: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc4_29: %tuple.type = tuple_literal (%.loc4_24, %.loc4_28) +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_in_interface.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete] +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .I = %I.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: interface @I { +// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self] +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: .x = .inst21.loc9_8 +// CHECK:STDOUT: .y = .inst25.loc9_15 +// CHECK:STDOUT: has_error +// CHECK:STDOUT: witness = () +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_in_class.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_struct_type [concrete] +// CHECK:STDOUT: %tuple.type: type = tuple_type (%C.elem, %C.elem) [concrete] +// CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %empty_struct_type, .y: %empty_struct_type} [concrete] +// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: class @C { +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %.loc9_20: %tuple.type = tuple_pattern (.inst20.loc9_9, .inst23.loc9_16) +// CHECK:STDOUT: %.loc9_3: %tuple.type = var_pattern %.loc9_20 +// CHECK:STDOUT: } +// CHECK:STDOUT: %.var: ref %tuple.type = var +// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete = constants.%complete_type] +// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = constants.%C +// CHECK:STDOUT: .x = .inst20.loc9_9 +// CHECK:STDOUT: .y = .inst23.loc9_16 +// CHECK:STDOUT: has_error +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- fail_initializer_mismatch.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] +// CHECK:STDOUT: %tuple.type.b6b: type = tuple_type (%empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: %tuple.type.572: type = tuple_type (%empty_struct_type) [concrete] +// CHECK:STDOUT: %tuple.type.8d4: type = tuple_type (%empty_struct_type, %empty_struct_type, %empty_struct_type) [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .x = .inst17.loc8_6 +// CHECK:STDOUT: .y = .inst21.loc8_13 +// CHECK:STDOUT: .a = .inst31.loc14_6 +// CHECK:STDOUT: .b = .inst35.loc14_13 +// CHECK:STDOUT: } +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: %empty_struct_type = binding_pattern x +// CHECK:STDOUT: %y.patt: %empty_struct_type = binding_pattern y +// CHECK:STDOUT: %.loc8: %tuple.type.b6b = tuple_pattern (%x.patt, %y.patt) +// CHECK:STDOUT: } +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %a.patt: %empty_struct_type = binding_pattern a +// CHECK:STDOUT: %b.patt: %empty_struct_type = binding_pattern b +// CHECK:STDOUT: %.loc14: %tuple.type.b6b = tuple_pattern (%a.patt, %b.patt) +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @__global_init() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: %.loc8_24: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc8_26: %tuple.type.572 = tuple_literal (%.loc8_24) +// CHECK:STDOUT: %.loc14_24: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc14_28: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc14_32: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc14_33: %tuple.type.8d4 = tuple_literal (%.loc14_24, %.loc14_28, %.loc14_32) +// CHECK:STDOUT: return +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/diagnostics/diagnostic_kind.def b/toolchain/diagnostics/diagnostic_kind.def index 33b198dcaa2b..e6654c22dd1f 100644 --- a/toolchain/diagnostics/diagnostic_kind.def +++ b/toolchain/diagnostics/diagnostic_kind.def @@ -252,6 +252,7 @@ CARBON_DIAGNOSTIC_KIND(ClassForwardDeclaredHere) CARBON_DIAGNOSTIC_KIND(ClassSpecificDeclOutsideClass) CARBON_DIAGNOSTIC_KIND(ClassSpecificDeclPrevious) CARBON_DIAGNOSTIC_KIND(ClassIncompleteWithinDefinition) +CARBON_DIAGNOSTIC_KIND(ExpectedSymbolicBindingInFieldDecl) CARBON_DIAGNOSTIC_KIND(ImplWithoutBase) // Deduction. @@ -447,6 +448,9 @@ CARBON_DIAGNOSTIC_KIND(AssociatedConstantWithDifferentValues) CARBON_DIAGNOSTIC_KIND(RewriteForAssociatedFunction) CARBON_DIAGNOSTIC_KIND(ResolveFacetTypeWithUndefinedInterface) +// Pattern matching diagnostics. +CARBON_DIAGNOSTIC_KIND(TuplePatternSizeDoesntMatchLiteral) + // ============================================================================ // Language server diagnostics // ============================================================================ diff --git a/toolchain/parse/handle_choice.cpp b/toolchain/parse/handle_choice.cpp index 8dabdfaee5cb..6ffea9363cc4 100644 --- a/toolchain/parse/handle_choice.cpp +++ b/toolchain/parse/handle_choice.cpp @@ -68,7 +68,7 @@ auto HandleChoiceAlternative(Context& context) -> void { if (context.PositionIs(Lex::TokenKind::OpenParen)) { context.AddLeafNode(NodeKind::IdentifierNameBeforeParams, *token); - context.PushState(State::PatternListAsTuple); + context.PushState(State::PatternListAsExplicit); } else { context.AddLeafNode(NodeKind::IdentifierNameNotBeforeParams, *token); } diff --git a/toolchain/parse/handle_decl_name_and_params.cpp b/toolchain/parse/handle_decl_name_and_params.cpp index d3c0c5f6676e..9f8ec8010db0 100644 --- a/toolchain/parse/handle_decl_name_and_params.cpp +++ b/toolchain/parse/handle_decl_name_and_params.cpp @@ -54,7 +54,7 @@ auto HandleDeclNameAndParams(Context& context) -> void { context.AddLeafNode(NodeKind::IdentifierNameBeforeParams, *identifier); state.state = State::DeclNameAndParamsAfterParams; context.PushState(state); - context.PushState(State::PatternListAsTuple); + context.PushState(State::PatternListAsExplicit); break; default: @@ -77,7 +77,7 @@ auto HandleDeclNameAndParamsAfterImplicit(Context& context) -> void { state.state = State::DeclNameAndParamsAfterParams; context.PushState(state); - context.PushState(State::PatternListAsTuple); + context.PushState(State::PatternListAsExplicit); } auto HandleDeclNameAndParamsAfterParams(Context& context) -> void { diff --git a/toolchain/parse/handle_pattern_list.cpp b/toolchain/parse/handle_pattern_list.cpp index a904709f4b2e..483bf0b3cb2f 100644 --- a/toolchain/parse/handle_pattern_list.cpp +++ b/toolchain/parse/handle_pattern_list.cpp @@ -7,7 +7,7 @@ namespace Carbon::Parse { -// Handles PatternListElementAs(Implicit|Tuple). +// Handles PatternListElementAs(Tuple|Explicit|Implicit). static auto HandlePatternListElement(Context& context, State pattern_state, State finish_state) -> void { auto state = context.PopState(); @@ -16,17 +16,22 @@ static auto HandlePatternListElement(Context& context, State pattern_state, context.PushStateForPattern(pattern_state, state.in_var_pattern); } -auto HandlePatternListElementAsImplicit(Context& context) -> void { - HandlePatternListElement(context, State::BindingPattern, - State::PatternListElementFinishAsImplicit); -} - auto HandlePatternListElementAsTuple(Context& context) -> void { - HandlePatternListElement(context, State::BindingPattern, + HandlePatternListElement(context, State::Pattern, State::PatternListElementFinishAsTuple); } -// Handles PatternListElementFinishAs(Implicit|Tuple). +auto HandlePatternListElementAsExplicit(Context& context) -> void { + HandlePatternListElement(context, State::Pattern, + State::PatternListElementFinishAsExplicit); +} + +auto HandlePatternListElementAsImplicit(Context& context) -> void { + HandlePatternListElement(context, State::Pattern, + State::PatternListElementFinishAsImplicit); +} + +// Handles PatternListElementFinishAs(Tuple|Explicit|Implicit). static auto HandlePatternListElementFinish(Context& context, Lex::TokenKind close_token, State param_state) -> void { @@ -43,17 +48,22 @@ static auto HandlePatternListElementFinish(Context& context, } } -auto HandlePatternListElementFinishAsImplicit(Context& context) -> void { - HandlePatternListElementFinish(context, Lex::TokenKind::CloseSquareBracket, - State::PatternListElementAsImplicit); -} - auto HandlePatternListElementFinishAsTuple(Context& context) -> void { HandlePatternListElementFinish(context, Lex::TokenKind::CloseParen, State::PatternListElementAsTuple); } -// Handles PatternListAs(Implicit|Tuple). +auto HandlePatternListElementFinishAsExplicit(Context& context) -> void { + HandlePatternListElementFinish(context, Lex::TokenKind::CloseParen, + State::PatternListElementAsExplicit); +} + +auto HandlePatternListElementFinishAsImplicit(Context& context) -> void { + HandlePatternListElementFinish(context, Lex::TokenKind::CloseSquareBracket, + State::PatternListElementAsImplicit); +} + +// Handles PatternListAs(Tuple|Explicit|Implicit). static auto HandlePatternList(Context& context, NodeKind node_kind, Lex::TokenKind open_token_kind, Lex::TokenKind close_token_kind, @@ -68,13 +78,6 @@ static auto HandlePatternList(Context& context, NodeKind node_kind, } } -auto HandlePatternListAsImplicit(Context& context) -> void { - HandlePatternList( - context, NodeKind::ImplicitParamListStart, - Lex::TokenKind::OpenSquareBracket, Lex::TokenKind::CloseSquareBracket, - State::PatternListElementAsImplicit, State::PatternListFinishAsImplicit); -} - auto HandlePatternListAsTuple(Context& context) -> void { HandlePatternList(context, NodeKind::TuplePatternStart, Lex::TokenKind::OpenParen, Lex::TokenKind::CloseParen, @@ -82,7 +85,21 @@ auto HandlePatternListAsTuple(Context& context) -> void { State::PatternListFinishAsTuple); } -// Handles PatternListFinishAs(Implicit|Tuple). +auto HandlePatternListAsExplicit(Context& context) -> void { + HandlePatternList(context, NodeKind::ExplicitParamListStart, + Lex::TokenKind::OpenParen, Lex::TokenKind::CloseParen, + State::PatternListElementAsExplicit, + State::PatternListFinishAsExplicit); +} + +auto HandlePatternListAsImplicit(Context& context) -> void { + HandlePatternList( + context, NodeKind::ImplicitParamListStart, + Lex::TokenKind::OpenSquareBracket, Lex::TokenKind::CloseSquareBracket, + State::PatternListElementAsImplicit, State::PatternListFinishAsImplicit); +} + +// Handles PatternListFinishAs(Tuple|Explicit|Implicit). static auto HandlePatternListFinish(Context& context, NodeKind node_kind, Lex::TokenKind token_kind) -> void { auto state = context.PopState(); @@ -91,14 +108,19 @@ static auto HandlePatternListFinish(Context& context, NodeKind node_kind, state.has_error); } -auto HandlePatternListFinishAsImplicit(Context& context) -> void { - HandlePatternListFinish(context, NodeKind::ImplicitParamList, - Lex::TokenKind::CloseSquareBracket); -} - auto HandlePatternListFinishAsTuple(Context& context) -> void { HandlePatternListFinish(context, NodeKind::TuplePattern, Lex::TokenKind::CloseParen); } +auto HandlePatternListFinishAsExplicit(Context& context) -> void { + HandlePatternListFinish(context, NodeKind::ExplicitParamList, + Lex::TokenKind::CloseParen); +} + +auto HandlePatternListFinishAsImplicit(Context& context) -> void { + HandlePatternListFinish(context, NodeKind::ImplicitParamList, + Lex::TokenKind::CloseSquareBracket); +} + } // namespace Carbon::Parse diff --git a/toolchain/parse/node_kind.def b/toolchain/parse/node_kind.def index b40d038bc0cc..64bd576eff4b 100644 --- a/toolchain/parse/node_kind.def +++ b/toolchain/parse/node_kind.def @@ -152,6 +152,8 @@ CARBON_PARSE_NODE_KIND(TuplePatternStart) CARBON_PARSE_NODE_KIND(PatternListComma) CARBON_PARSE_NODE_KIND(TuplePattern) +CARBON_PARSE_NODE_KIND(ExplicitParamListStart) +CARBON_PARSE_NODE_KIND(ExplicitParamList) CARBON_PARSE_NODE_KIND(ImplicitParamListStart) CARBON_PARSE_NODE_KIND(ImplicitParamList) diff --git a/toolchain/parse/state.def b/toolchain/parse/state.def index 65fdee01554b..63aa7b328f9e 100644 --- a/toolchain/parse/state.def +++ b/toolchain/parse/state.def @@ -239,7 +239,7 @@ CARBON_PARSE_STATE(CodeBlockFinish) // // name ( ... ) // ^~~~ -// 1. PatternListAsTuple +// 1. PatternListAsExplicit // 2. DeclNameAndParamsAfterParams // // name ... @@ -256,7 +256,7 @@ CARBON_PARSE_STATE(DeclNameAndParams) // // name [ ... ] ( ... ) // ^ -// 1. PatternListAsTuple +// 1. PatternListAsExplicit // 2. DeclNameAndParamsAfterParams // // name [ ... ] ??? @@ -827,9 +827,9 @@ CARBON_PARSE_STATE(AliasFinish) // // ... // ^ -// 1. BindingPattern -// 2. PatternListElementFinishAs(Implicit|Tuple) -CARBON_PARSE_STATE_VARIANTS2(PatternListElement, Implicit, Tuple) +// 1. Pattern +// 2. PatternListElementFinishAs(Tuple|Explicit|Implicit) +CARBON_PARSE_STATE_VARIANTS3(PatternListElement, Tuple, Explicit, Implicit) // Finishes parsing a pattern in a comma-separated list, including the // optional trailing `,`. If there are more patterns, enqueues another @@ -845,38 +845,39 @@ CARBON_PARSE_STATE_VARIANTS2(PatternListElement, Implicit, Tuple) // // ... , ... // ^ -// 1. PatternListElementAs(Implicit|Tuple) +// 1. PatternListElementAs(Tuple|Explicit|Implicit) // // ... // ^ // (state done) -CARBON_PARSE_STATE_VARIANTS2(PatternListElementFinish, Implicit, Tuple) +CARBON_PARSE_STATE_VARIANTS3(PatternListElementFinish, Tuple, Explicit, + Implicit) // Handles processing of a tuple pattern (parentheses) or implicit parameter // list (square brackets). // -// ( ) (variant is Tuple) +// ( ) (variant is Tuple or Explicit) // ^ // [ ] (variant is Implicit) // ^ -// 1. PatternListFinishAs(Tuple|Implicit) +// 1. PatternListFinishAs(Tuple|Explicit|Implicit) // -// ( ... ) (variant is Tuple) +// ( ... ) (variant is Tuple or Explicit) // ^ // [ ... ] (variant is Implicit) // ^ -// 1. PatternListElementAs(Tuple|Implicit) -// 2. PatternListFinishAs(Tuple|Implicit) -CARBON_PARSE_STATE_VARIANTS2(PatternList, Implicit, Tuple) +// 1. PatternListElementAs(Tuple|Explicit|Implicit) +// 2. PatternListFinishAs(Tuple|Explicit|Implicit) +CARBON_PARSE_STATE_VARIANTS3(PatternList, Tuple, Explicit, Implicit) // Handles processing of a parameter list `]` or `)`. // -// ( ... ) (variant is Tuple) +// ( ... ) (variant is Tuple or Explicit) // ^ // [ ... ] (variant is Implicit) // ^ // (state done) -CARBON_PARSE_STATE_VARIANTS2(PatternListFinish, Implicit, Tuple) +CARBON_PARSE_STATE_VARIANTS3(PatternListFinish, Tuple, Explicit, Implicit) // Handles the processing of a `(condition)` up through the expression. // diff --git a/toolchain/parse/testdata/alias/basic.carbon b/toolchain/parse/testdata/alias/basic.carbon index 6bfed47039c2..9ad0d6812cee 100644 --- a/toolchain/parse/testdata/alias/basic.carbon +++ b/toolchain/parse/testdata/alias/basic.carbon @@ -60,8 +60,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'f'}, diff --git a/toolchain/parse/testdata/alias/fail_syntax.carbon b/toolchain/parse/testdata/alias/fail_syntax.carbon index ba07d7d40e1d..82789c0a8268 100644 --- a/toolchain/parse/testdata/alias/fail_syntax.carbon +++ b/toolchain/parse/testdata/alias/fail_syntax.carbon @@ -106,8 +106,8 @@ alias a = b // CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, diff --git a/toolchain/parse/testdata/array/fail_syntax.carbon b/toolchain/parse/testdata/array/fail_syntax.carbon index bebe250e1dde..3f52af452d3d 100644 --- a/toolchain/parse/testdata/array/fail_syntax.carbon +++ b/toolchain/parse/testdata/array/fail_syntax.carbon @@ -87,8 +87,8 @@ var x: [i32]; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'X'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ArrayExprStart', text: '['}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, // CHECK:STDOUT: {kind: 'ArrayExprSemi', text: ':', has_error: yes, subtree_size: 3}, diff --git a/toolchain/parse/testdata/auto/match_case.carbon b/toolchain/parse/testdata/auto/match_case.carbon index 3e8f6f41a6a1..fc7ba23dc5ab 100644 --- a/toolchain/parse/testdata/auto/match_case.carbon +++ b/toolchain/parse/testdata/auto/match_case.carbon @@ -20,8 +20,8 @@ fn f() -> bool { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/auto/return.carbon b/toolchain/parse/testdata/auto/return.carbon index 4fc149cf7439..fc0c10ae82a4 100644 --- a/toolchain/parse/testdata/auto/return.carbon +++ b/toolchain/parse/testdata/auto/return.carbon @@ -17,8 +17,8 @@ fn f() -> auto { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon b/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon index 70f519450309..39575327a859 100644 --- a/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon +++ b/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon @@ -35,8 +35,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, diff --git a/toolchain/parse/testdata/basics/fail_invalid_designators.carbon b/toolchain/parse/testdata/basics/fail_invalid_designators.carbon index 40c4be50bc11..0ea30455c6a5 100644 --- a/toolchain/parse/testdata/basics/fail_invalid_designators.carbon +++ b/toolchain/parse/testdata/basics/fail_invalid_designators.carbon @@ -27,8 +27,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: ';', has_error: yes}, diff --git a/toolchain/parse/testdata/basics/function_call.carbon b/toolchain/parse/testdata/basics/function_call.carbon index 6188a0f3f24a..f04bbe388fbd 100644 --- a/toolchain/parse/testdata/basics/function_call.carbon +++ b/toolchain/parse/testdata/basics/function_call.carbon @@ -18,8 +18,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, diff --git a/toolchain/parse/testdata/basics/multifile.carbon b/toolchain/parse/testdata/basics/multifile.carbon index f515e0312aa8..72a15cc879c7 100644 --- a/toolchain/parse/testdata/basics/multifile.carbon +++ b/toolchain/parse/testdata/basics/multifile.carbon @@ -19,8 +19,8 @@ fn B() {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, @@ -30,8 +30,8 @@ fn B() {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'B'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/basics/numeric_literals.carbon b/toolchain/parse/testdata/basics/numeric_literals.carbon index 34389243d358..227768fb3f14 100644 --- a/toolchain/parse/testdata/basics/numeric_literals.carbon +++ b/toolchain/parse/testdata/basics/numeric_literals.carbon @@ -34,8 +34,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'ints'}, diff --git a/toolchain/parse/testdata/basics/parens.carbon b/toolchain/parse/testdata/basics/parens.carbon index 99a89f59c66f..c38ce6e47ac4 100644 --- a/toolchain/parse/testdata/basics/parens.carbon +++ b/toolchain/parse/testdata/basics/parens.carbon @@ -17,11 +17,11 @@ fn F(n: i32) -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10}, diff --git a/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon b/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon index b5ba62f42bc1..d1ad0688a32e 100644 --- a/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon +++ b/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon @@ -19,11 +19,11 @@ choice MissingDefinition(T:! type); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'MissingDefinition'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: ';', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'ChoiceDefinition', text: ';', has_error: yes, subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/choice/local.carbon b/toolchain/parse/testdata/choice/local.carbon index 13f473a77d62..7cc43ba77917 100644 --- a/toolchain/parse/testdata/choice/local.carbon +++ b/toolchain/parse/testdata/choice/local.carbon @@ -20,8 +20,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'C'}, diff --git a/toolchain/parse/testdata/choice/parameterized.carbon b/toolchain/parse/testdata/choice/parameterized.carbon index 1a5d2a127cfa..017e8ae611dd 100644 --- a/toolchain/parse/testdata/choice/parameterized.carbon +++ b/toolchain/parse/testdata/choice/parameterized.carbon @@ -18,18 +18,18 @@ choice OptionalElement(T:! type) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'OptionalElement'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Element'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'value'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'None'}, // CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, diff --git a/toolchain/parse/testdata/class/adapt.carbon b/toolchain/parse/testdata/class/adapt.carbon index 4a2efdb02753..e2a640dfa1bd 100644 --- a/toolchain/parse/testdata/class/adapt.carbon +++ b/toolchain/parse/testdata/class/adapt.carbon @@ -162,8 +162,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, diff --git a/toolchain/parse/testdata/class/base_misplaced.carbon b/toolchain/parse/testdata/class/base_misplaced.carbon index 0e35b94fd292..eda451d5f4c2 100644 --- a/toolchain/parse/testdata/class/base_misplaced.carbon +++ b/toolchain/parse/testdata/class/base_misplaced.carbon @@ -32,8 +32,8 @@ fn F() { // CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 4}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, // CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, diff --git a/toolchain/parse/testdata/class/basic.carbon b/toolchain/parse/testdata/class/basic.carbon index 81e6711e3fa8..41ba7f3b56c6 100644 --- a/toolchain/parse/testdata/class/basic.carbon +++ b/toolchain/parse/testdata/class/basic.carbon @@ -20,8 +20,8 @@ class Foo { // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/class/fn_definitions.carbon b/toolchain/parse/testdata/class/fn_definitions.carbon index 9dc7a8cec123..4d91aa5c62af 100644 --- a/toolchain/parse/testdata/class/fn_definitions.carbon +++ b/toolchain/parse/testdata/class/fn_definitions.carbon @@ -24,8 +24,8 @@ class Foo { // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Make'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, @@ -45,8 +45,8 @@ class Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12}, @@ -65,8 +65,8 @@ class Foo { // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'Addr', text: 'addr', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12}, // CHECK:STDOUT: {kind: 'SelfValueNameExpr', text: 'self'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, diff --git a/toolchain/parse/testdata/class/local.carbon b/toolchain/parse/testdata/class/local.carbon index f72499cb5fef..95d45a9fcbc4 100644 --- a/toolchain/parse/testdata/class/local.carbon +++ b/toolchain/parse/testdata/class/local.carbon @@ -21,30 +21,30 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'C'}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'H'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'C'}, // CHECK:STDOUT: {kind: 'NameQualifierWithoutParams', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'H'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, diff --git a/toolchain/parse/testdata/class/mismatched_introducer.carbon b/toolchain/parse/testdata/class/mismatched_introducer.carbon index 90cc2847be14..19e92bbc7f42 100644 --- a/toolchain/parse/testdata/class/mismatched_introducer.carbon +++ b/toolchain/parse/testdata/class/mismatched_introducer.carbon @@ -23,8 +23,8 @@ abstract base class C; // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, diff --git a/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon b/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon index 13d433d6d406..e9ff251a69d1 100644 --- a/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon +++ b/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon @@ -23,8 +23,8 @@ fn foo() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, diff --git a/toolchain/parse/testdata/for/fail_missing_cond.carbon b/toolchain/parse/testdata/for/fail_missing_cond.carbon index 0bf46d24d6b8..66fe279e0978 100644 --- a/toolchain/parse/testdata/for/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/for/fail_missing_cond.carbon @@ -34,8 +34,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: 'for', has_error: yes}, // CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, diff --git a/toolchain/parse/testdata/for/fail_missing_in.carbon b/toolchain/parse/testdata/for/fail_missing_in.carbon index 44f45bc18865..b7910a81c617 100644 --- a/toolchain/parse/testdata/for/fail_missing_in.carbon +++ b/toolchain/parse/testdata/for/fail_missing_in.carbon @@ -23,8 +23,8 @@ fn foo() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, diff --git a/toolchain/parse/testdata/for/fail_missing_var.carbon b/toolchain/parse/testdata/for/fail_missing_var.carbon index 6d8640cb345b..2a9edf63a057 100644 --- a/toolchain/parse/testdata/for/fail_missing_var.carbon +++ b/toolchain/parse/testdata/for/fail_missing_var.carbon @@ -23,8 +23,8 @@ fn foo() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, diff --git a/toolchain/parse/testdata/for/fail_returned_var.carbon b/toolchain/parse/testdata/for/fail_returned_var.carbon index fc876bba70a1..6bf697d3d2a3 100644 --- a/toolchain/parse/testdata/for/fail_returned_var.carbon +++ b/toolchain/parse/testdata/for/fail_returned_var.carbon @@ -24,8 +24,8 @@ fn foo() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/for/fail_square_brackets.carbon b/toolchain/parse/testdata/for/fail_square_brackets.carbon index a5f595a66fb3..22100f2daf2d 100644 --- a/toolchain/parse/testdata/for/fail_square_brackets.carbon +++ b/toolchain/parse/testdata/for/fail_square_brackets.carbon @@ -34,8 +34,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: 'for', has_error: yes}, // CHECK:STDOUT: {kind: 'ArrayExprStart', text: '['}, diff --git a/toolchain/parse/testdata/for/nested.carbon b/toolchain/parse/testdata/for/nested.carbon index b606dba8c07a..411ea8011949 100644 --- a/toolchain/parse/testdata/for/nested.carbon +++ b/toolchain/parse/testdata/for/nested.carbon @@ -21,8 +21,8 @@ fn foo() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, diff --git a/toolchain/parse/testdata/for/simple.carbon b/toolchain/parse/testdata/for/simple.carbon index 8ba10cf34123..b0cdceb51083 100644 --- a/toolchain/parse/testdata/for/simple.carbon +++ b/toolchain/parse/testdata/for/simple.carbon @@ -19,8 +19,8 @@ fn foo() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, diff --git a/toolchain/parse/testdata/function/declaration/addr.carbon b/toolchain/parse/testdata/function/declaration/addr.carbon index 6fb6937550a7..5d4a6ef64686 100644 --- a/toolchain/parse/testdata/function/declaration/addr.carbon +++ b/toolchain/parse/testdata/function/declaration/addr.carbon @@ -15,13 +15,13 @@ fn foo(addr a: i32*); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'Addr', text: 'addr', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/basic.carbon b/toolchain/parse/testdata/function/declaration/basic.carbon index c9367f43dfa4..a10a1f2a8631 100644 --- a/toolchain/parse/testdata/function/declaration/basic.carbon +++ b/toolchain/parse/testdata/function/declaration/basic.carbon @@ -15,8 +15,8 @@ fn F(); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/extern.carbon b/toolchain/parse/testdata/function/declaration/extern.carbon index ab6c8049daee..a3c6eff6f309 100644 --- a/toolchain/parse/testdata/function/declaration/extern.carbon +++ b/toolchain/parse/testdata/function/declaration/extern.carbon @@ -46,8 +46,8 @@ extern library foo fn G(); // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -59,8 +59,8 @@ extern library foo fn G(); // CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -72,8 +72,8 @@ extern library foo fn G(); // CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -85,8 +85,8 @@ extern library foo fn G(); // CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon index 2fd6f9a16719..cc936397bd21 100644 --- a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon @@ -25,8 +25,8 @@ fn F(); // CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon index 7f6c04d36831..5d739de8f0a6 100644 --- a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon @@ -25,8 +25,8 @@ fn F(); // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon index df96cbecac06..783b03fef648 100644 --- a/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon @@ -25,8 +25,8 @@ fn F(); // CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon b/toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon index 7f2585ae6c00..14821be29e69 100644 --- a/toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon @@ -23,8 +23,8 @@ fn F(); // CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon b/toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon index 6ec74baac1ff..8ce3ec91dbff 100644 --- a/toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon @@ -22,8 +22,8 @@ fn F(); // CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: '}', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon b/toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon index 9c9cf50a97ce..a893f88c1939 100644 --- a/toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon +++ b/toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon @@ -19,11 +19,11 @@ fn foo(bar); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'bar'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'bar', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/impl_fn.carbon b/toolchain/parse/testdata/function/declaration/impl_fn.carbon index 0a0e7b66f8da..1af6fba26eab 100644 --- a/toolchain/parse/testdata/function/declaration/impl_fn.carbon +++ b/toolchain/parse/testdata/function/declaration/impl_fn.carbon @@ -19,30 +19,30 @@ private impl default fn I(); // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, // CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'H'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, // CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'I'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/implicit_empty.carbon b/toolchain/parse/testdata/function/declaration/implicit_empty.carbon index 21a78462c971..576404c24db4 100644 --- a/toolchain/parse/testdata/function/declaration/implicit_empty.carbon +++ b/toolchain/parse/testdata/function/declaration/implicit_empty.carbon @@ -17,8 +17,8 @@ fn foo[](); // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, // CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/implicit_params.carbon b/toolchain/parse/testdata/function/declaration/implicit_params.carbon index 37b6831d21bf..ac40a3e2fd1d 100644 --- a/toolchain/parse/testdata/function/declaration/implicit_params.carbon +++ b/toolchain/parse/testdata/function/declaration/implicit_params.carbon @@ -24,8 +24,8 @@ fn foo[a: i32, b: i32](); // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/params.carbon b/toolchain/parse/testdata/function/declaration/params.carbon index 17ac5e19cea3..ee7a81bffe3f 100644 --- a/toolchain/parse/testdata/function/declaration/params.carbon +++ b/toolchain/parse/testdata/function/declaration/params.carbon @@ -15,7 +15,7 @@ fn foo(a: i32, b: i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -23,7 +23,7 @@ fn foo(a: i32, b: i32); // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/declaration/with_return_type.carbon b/toolchain/parse/testdata/function/declaration/with_return_type.carbon index a869793be16e..a90faf67aea7 100644 --- a/toolchain/parse/testdata/function/declaration/with_return_type.carbon +++ b/toolchain/parse/testdata/function/declaration/with_return_type.carbon @@ -15,8 +15,8 @@ fn foo() -> u32; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'UnsignedIntTypeLiteral', text: 'u32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, diff --git a/toolchain/parse/testdata/function/definition/basic.carbon b/toolchain/parse/testdata/function/definition/basic.carbon index 444357dd4982..5ee20ab221e6 100644 --- a/toolchain/parse/testdata/function/definition/basic.carbon +++ b/toolchain/parse/testdata/function/definition/basic.carbon @@ -15,8 +15,8 @@ fn F() {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/function/definition/builtin.carbon b/toolchain/parse/testdata/function/definition/builtin.carbon index 8c1f889826d6..4f1c1d5f31ce 100644 --- a/toolchain/parse/testdata/function/definition/builtin.carbon +++ b/toolchain/parse/testdata/function/definition/builtin.carbon @@ -19,8 +19,8 @@ impl T as I { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BuiltinName', text: '"builtin"'}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', subtree_size: 7}, @@ -31,8 +31,8 @@ impl T as I { // CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Op'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BuiltinName', text: '"builtin"'}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', subtree_size: 7}, diff --git a/toolchain/parse/testdata/function/definition/decl_statement.carbon b/toolchain/parse/testdata/function/definition/decl_statement.carbon index 019b7c47cbec..92d0104dafac 100644 --- a/toolchain/parse/testdata/function/definition/decl_statement.carbon +++ b/toolchain/parse/testdata/function/definition/decl_statement.carbon @@ -47,8 +47,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'A'}, @@ -71,8 +71,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, @@ -121,8 +121,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, @@ -147,20 +147,20 @@ fn F() { // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'H'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, diff --git a/toolchain/parse/testdata/function/definition/extern.carbon b/toolchain/parse/testdata/function/definition/extern.carbon index 606df22adae0..396fa3e97c95 100644 --- a/toolchain/parse/testdata/function/definition/extern.carbon +++ b/toolchain/parse/testdata/function/definition/extern.carbon @@ -22,8 +22,8 @@ extern library "foo" fn G() {} // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, @@ -36,8 +36,8 @@ extern library "foo" fn G() {} // CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'G'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/function/definition/fail_builtin.carbon b/toolchain/parse/testdata/function/definition/fail_builtin.carbon index cba5b2052fae..678a64c13afc 100644 --- a/toolchain/parse/testdata/function/definition/fail_builtin.carbon +++ b/toolchain/parse/testdata/function/definition/fail_builtin.carbon @@ -31,27 +31,27 @@ fn TestRecoveryFromSpuriousEquals(); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'NotString'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'JunkAfterString'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BuiltinName', text: '"hello"'}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', has_error: yes, subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'SpuriousEquals'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: '}', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'TestRecoveryFromSpuriousEquals'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon b/toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon index 622e10424ddd..405f0bd37060 100644 --- a/toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon +++ b/toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon @@ -23,8 +23,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bar'}, // CHECK:STDOUT: {kind: 'ExprStatement', text: 'bar', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/function/definition/nested.carbon b/toolchain/parse/testdata/function/definition/nested.carbon index 67c6555537df..9e32b32c2e22 100644 --- a/toolchain/parse/testdata/function/definition/nested.carbon +++ b/toolchain/parse/testdata/function/definition/nested.carbon @@ -18,16 +18,16 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'NamedParams'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, diff --git a/toolchain/parse/testdata/function/definition/with_params.carbon b/toolchain/parse/testdata/function/definition/with_params.carbon index 95c0c156c783..77a7d44e4d3f 100644 --- a/toolchain/parse/testdata/function/definition/with_params.carbon +++ b/toolchain/parse/testdata/function/definition/with_params.carbon @@ -17,7 +17,7 @@ fn foo(bar: i64, baz: i64) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'bar'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i64'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -25,7 +25,7 @@ fn foo(bar: i64, baz: i64) { // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'baz'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i64'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, // CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, diff --git a/toolchain/parse/testdata/function/definition/with_return_type.carbon b/toolchain/parse/testdata/function/definition/with_return_type.carbon index bc54fe60c9bc..0de1644ebd19 100644 --- a/toolchain/parse/testdata/function/definition/with_return_type.carbon +++ b/toolchain/parse/testdata/function/definition/with_return_type.carbon @@ -17,8 +17,8 @@ fn foo() -> f64 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f64'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/generics/deduced_params/empty.carbon b/toolchain/parse/testdata/generics/deduced_params/empty.carbon index 37cebd9b7c77..3286921885e9 100644 --- a/toolchain/parse/testdata/generics/deduced_params/empty.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/empty.carbon @@ -19,15 +19,15 @@ interface Bar[]() {} // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, // CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, // CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 7}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/deduced_params/one.carbon b/toolchain/parse/testdata/generics/deduced_params/one.carbon index 09377800afa6..8a442da39f60 100644 --- a/toolchain/parse/testdata/generics/deduced_params/one.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/one.carbon @@ -22,8 +22,8 @@ interface Bar[a: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 10}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, @@ -32,8 +32,8 @@ interface Bar[a: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 10}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon b/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon index f3fd75a02237..1eb7d0fbbfc1 100644 --- a/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon @@ -23,8 +23,8 @@ interface Bar[a: i32,]() {} // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, @@ -34,8 +34,8 @@ interface Bar[a: i32,]() {} // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 11}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/deduced_params/six.carbon b/toolchain/parse/testdata/generics/deduced_params/six.carbon index 2c89412e51ef..5fd6c1c34ab5 100644 --- a/toolchain/parse/testdata/generics/deduced_params/six.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/six.carbon @@ -42,8 +42,8 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 30}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, @@ -72,8 +72,8 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 30}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 31}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/deduced_params/two.carbon b/toolchain/parse/testdata/generics/deduced_params/two.carbon index 6c6714333203..46eb843ac094 100644 --- a/toolchain/parse/testdata/generics/deduced_params/two.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/two.carbon @@ -26,8 +26,8 @@ interface Bar[a: i32, b: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, @@ -40,8 +40,8 @@ interface Bar[a: i32, b: i32]() {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 14}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon b/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon index 0d7e39584399..44b09422ce86 100644 --- a/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon @@ -27,8 +27,8 @@ interface Bar[a: i32, b: i32,]() {} // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 15}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, @@ -42,8 +42,8 @@ interface Bar[a: i32, b: i32,]() {} // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 15}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/generic_params/basic.carbon b/toolchain/parse/testdata/generics/generic_params/basic.carbon index d5a44ae3bc2e..fa5452943c83 100644 --- a/toolchain/parse/testdata/generics/generic_params/basic.carbon +++ b/toolchain/parse/testdata/generics/generic_params/basic.carbon @@ -15,11 +15,11 @@ fn foo(a:! i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon b/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon index 98d666d432e8..66cd6caff0fa 100644 --- a/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon +++ b/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon @@ -43,46 +43,46 @@ fn E(template:! i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'i32', has_error: yes}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'i32', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'template', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'B'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'C'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: ')', has_error: yes}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'template', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'D'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: ':!', has_error: yes}, // CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'E'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: ':!', has_error: yes}, // CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/generics/generic_params/template.carbon b/toolchain/parse/testdata/generics/generic_params/template.carbon index ac4432908d29..046d42cccfe2 100644 --- a/toolchain/parse/testdata/generics/generic_params/template.carbon +++ b/toolchain/parse/testdata/generics/generic_params/template.carbon @@ -15,12 +15,12 @@ fn foo(template a:! i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/generics/generic_params/template_addr.carbon b/toolchain/parse/testdata/generics/generic_params/template_addr.carbon index 4784cc13c4b6..f8c8783cc868 100644 --- a/toolchain/parse/testdata/generics/generic_params/template_addr.carbon +++ b/toolchain/parse/testdata/generics/generic_params/template_addr.carbon @@ -25,11 +25,11 @@ fn bar(addr template b:! i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'addr', has_error: yes}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'addr', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'template', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -38,13 +38,13 @@ fn bar(addr template b:! i32); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 4}, // CHECK:STDOUT: {kind: 'Addr', text: 'addr', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/generics/impl/basic.carbon b/toolchain/parse/testdata/generics/impl/basic.carbon index e28ea44270cf..a59eae7a681f 100644 --- a/toolchain/parse/testdata/generics/impl/basic.carbon +++ b/toolchain/parse/testdata/generics/impl/basic.carbon @@ -27,11 +27,11 @@ impl i32 as Interface { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, diff --git a/toolchain/parse/testdata/generics/impl/class.carbon b/toolchain/parse/testdata/generics/impl/class.carbon index 3ab0f6ceb2f5..5efec6dfd37c 100644 --- a/toolchain/parse/testdata/generics/impl/class.carbon +++ b/toolchain/parse/testdata/generics/impl/class.carbon @@ -47,8 +47,8 @@ class C { // CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, diff --git a/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon b/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon index 83574fcb37ac..4855c95564bb 100644 --- a/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon +++ b/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon @@ -44,8 +44,8 @@ fn C.(Self as Interface).F() {} // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, @@ -55,8 +55,8 @@ fn C.(Self as Interface).F() {} // CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, @@ -72,8 +72,8 @@ fn C.(Self as Interface).F() {} // CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 15}, diff --git a/toolchain/parse/testdata/generics/interface/basic.carbon b/toolchain/parse/testdata/generics/interface/basic.carbon index c12e67f5cc42..62a1b2cf1a91 100644 --- a/toolchain/parse/testdata/generics/interface/basic.carbon +++ b/toolchain/parse/testdata/generics/interface/basic.carbon @@ -26,11 +26,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, @@ -41,11 +41,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, diff --git a/toolchain/parse/testdata/generics/interface/default_fn.carbon b/toolchain/parse/testdata/generics/interface/default_fn.carbon index b8438ecd0226..62f2022ac675 100644 --- a/toolchain/parse/testdata/generics/interface/default_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/default_fn.carbon @@ -30,11 +30,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 's'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, @@ -46,8 +46,8 @@ interface Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13}, diff --git a/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon b/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon index d25fb3e3f922..45990cc0d633 100644 --- a/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon +++ b/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon @@ -35,11 +35,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'InvalidParse', text: 'Self', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'me', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, @@ -50,11 +50,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'InvalidParse', text: 'Self', has_error: yes}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'Self', has_error: yes, subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, diff --git a/toolchain/parse/testdata/generics/interface/final_fn.carbon b/toolchain/parse/testdata/generics/interface/final_fn.carbon index 06447366226e..788a3706e0f5 100644 --- a/toolchain/parse/testdata/generics/interface/final_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/final_fn.carbon @@ -28,11 +28,11 @@ interface Order { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'right'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, @@ -44,11 +44,11 @@ interface Order { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'right'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 16}, diff --git a/toolchain/parse/testdata/generics/interface/final_member_definition.carbon b/toolchain/parse/testdata/generics/interface/final_member_definition.carbon index 7ec7cda7757f..63ed5985e43d 100644 --- a/toolchain/parse/testdata/generics/interface/final_member_definition.carbon +++ b/toolchain/parse/testdata/generics/interface/final_member_definition.carbon @@ -28,11 +28,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 16}, diff --git a/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon b/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon index 85fc80d0df5a..2e77f8266227 100644 --- a/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon @@ -20,8 +20,8 @@ interface Foo { // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'FooFactory'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, diff --git a/toolchain/parse/testdata/generics/interface/self_pointer.carbon b/toolchain/parse/testdata/generics/interface/self_pointer.carbon index 32d5017b9a3d..e78385460090 100644 --- a/toolchain/parse/testdata/generics/interface/self_pointer.carbon +++ b/toolchain/parse/testdata/generics/interface/self_pointer.carbon @@ -28,11 +28,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'Addr', text: 'addr', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, @@ -45,11 +45,11 @@ interface Foo { // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, // CHECK:STDOUT: {kind: 'Addr', text: 'addr', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, diff --git a/toolchain/parse/testdata/generics/named_constraint/basic.carbon b/toolchain/parse/testdata/generics/named_constraint/basic.carbon index f11b73a3cdaf..c2c4a76ab3de 100644 --- a/toolchain/parse/testdata/generics/named_constraint/basic.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/basic.carbon @@ -22,8 +22,8 @@ constraint ForwardDeclared; // CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, diff --git a/toolchain/parse/testdata/generics/named_constraint/defined_method.carbon b/toolchain/parse/testdata/generics/named_constraint/defined_method.carbon index 8ffe50a5919c..8f55eb5bbef2 100644 --- a/toolchain/parse/testdata/generics/named_constraint/defined_method.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/defined_method.carbon @@ -25,11 +25,11 @@ constraint Foo { // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 15}, diff --git a/toolchain/parse/testdata/generics/params/empty.carbon b/toolchain/parse/testdata/generics/params/empty.carbon index 55e3f97e0338..5dbd1e8b78e1 100644 --- a/toolchain/parse/testdata/generics/params/empty.carbon +++ b/toolchain/parse/testdata/generics/params/empty.carbon @@ -17,13 +17,13 @@ interface Bar() {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/name_qualifier.carbon b/toolchain/parse/testdata/generics/params/name_qualifier.carbon index 5b9b510b8077..e49af9b0c717 100644 --- a/toolchain/parse/testdata/generics/params/name_qualifier.carbon +++ b/toolchain/parse/testdata/generics/params/name_qualifier.carbon @@ -35,29 +35,29 @@ fn OuterGeneric(T:! type).InnerGeneric(U:! type).F(x: T, y: U) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'GenericClass1'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'GenericClass1'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NameQualifierWithParams', text: '.', subtree_size: 7}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 13}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, @@ -67,16 +67,16 @@ fn OuterGeneric(T:! type).InnerGeneric(U:! type).F(x: T, y: U) {} // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'X'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 19}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, @@ -86,52 +86,52 @@ fn OuterGeneric(T:! type).InnerGeneric(U:! type).F(x: T, y: U) {} // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, // CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'X'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NameQualifierWithParams', text: '.', subtree_size: 12}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'U'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 17}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NameQualifierWithParams', text: '.', subtree_size: 7}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'U'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -139,26 +139,26 @@ fn OuterGeneric(T:! type).InnerGeneric(U:! type).F(x: T, y: U) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 28}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NameQualifierWithParams', text: '.', subtree_size: 7}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'U'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NameQualifierWithParams', text: '.', subtree_size: 7}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -166,7 +166,7 @@ fn OuterGeneric(T:! type).InnerGeneric(U:! type).F(x: T, y: U) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 26}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 27}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/one.carbon b/toolchain/parse/testdata/generics/params/one.carbon index 6e284d112dd5..40994352d3c4 100644 --- a/toolchain/parse/testdata/generics/params/one.carbon +++ b/toolchain/parse/testdata/generics/params/one.carbon @@ -17,19 +17,19 @@ interface Bar(a: i32) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 8}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon b/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon index f2eb0278d284..73c1eceb62ce 100644 --- a/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon @@ -17,21 +17,21 @@ interface Bar(a: i32,) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 9}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/six.carbon b/toolchain/parse/testdata/generics/params/six.carbon index b1e893971ee4..a83f2fa21827 100644 --- a/toolchain/parse/testdata/generics/params/six.carbon +++ b/toolchain/parse/testdata/generics/params/six.carbon @@ -17,7 +17,7 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -41,11 +41,11 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'f'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 25}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 25}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 28}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -69,7 +69,7 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'f'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 25}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 25}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 28}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 29}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/two.carbon b/toolchain/parse/testdata/generics/params/two.carbon index dcc94b043ab5..4087c367efae 100644 --- a/toolchain/parse/testdata/generics/params/two.carbon +++ b/toolchain/parse/testdata/generics/params/two.carbon @@ -17,7 +17,7 @@ interface Bar(a: i32, b: i32) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -25,11 +25,11 @@ interface Bar(a: i32, b: i32) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -37,7 +37,7 @@ interface Bar(a: i32, b: i32) {} // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 12}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon b/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon index b07695007f08..a93aab4c028d 100644 --- a/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon @@ -17,7 +17,7 @@ interface Bar(a: i32, b: i32,) {} // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -26,11 +26,11 @@ interface Bar(a: i32, b: i32,) {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 10}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, // CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 13}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -39,7 +39,7 @@ interface Bar(a: i32, b: i32,) {} // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 10}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, // CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 13}, // CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/if/basic.carbon b/toolchain/parse/testdata/if/basic.carbon index e7e833329fe2..280d96e62071 100644 --- a/toolchain/parse/testdata/if/basic.carbon +++ b/toolchain/parse/testdata/if/basic.carbon @@ -23,8 +23,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/if/else.carbon b/toolchain/parse/testdata/if/else.carbon index e92bd09d409c..d9db13f4c79c 100644 --- a/toolchain/parse/testdata/if/else.carbon +++ b/toolchain/parse/testdata/if/else.carbon @@ -28,8 +28,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/if/fail_else_unbraced.carbon b/toolchain/parse/testdata/if/fail_else_unbraced.carbon index d3d1e746e703..cc682ea303c0 100644 --- a/toolchain/parse/testdata/if/fail_else_unbraced.carbon +++ b/toolchain/parse/testdata/if/fail_else_unbraced.carbon @@ -42,8 +42,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/if/fail_errors.carbon b/toolchain/parse/testdata/if/fail_errors.carbon index 0d7ef8e1f227..4e12e62c1885 100644 --- a/toolchain/parse/testdata/if/fail_errors.carbon +++ b/toolchain/parse/testdata/if/fail_errors.carbon @@ -40,8 +40,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/if/fail_missing_cond.carbon b/toolchain/parse/testdata/if/fail_missing_cond.carbon index b2379b5428f0..910dcb7fb382 100644 --- a/toolchain/parse/testdata/if/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/if/fail_missing_cond.carbon @@ -22,8 +22,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, diff --git a/toolchain/parse/testdata/if/fail_square_brackets.carbon b/toolchain/parse/testdata/if/fail_square_brackets.carbon index 2a270e73a316..f509718de253 100644 --- a/toolchain/parse/testdata/if/fail_square_brackets.carbon +++ b/toolchain/parse/testdata/if/fail_square_brackets.carbon @@ -29,8 +29,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, // CHECK:STDOUT: {kind: 'ArrayExprStart', text: '['}, diff --git a/toolchain/parse/testdata/if/fail_unbraced.carbon b/toolchain/parse/testdata/if/fail_unbraced.carbon index b21a4d7e7247..09e24ec07df6 100644 --- a/toolchain/parse/testdata/if/fail_unbraced.carbon +++ b/toolchain/parse/testdata/if/fail_unbraced.carbon @@ -33,8 +33,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/if_expr/basic.carbon b/toolchain/parse/testdata/if_expr/basic.carbon index 9c9aab3938db..e8f79af5e4ce 100644 --- a/toolchain/parse/testdata/if_expr/basic.carbon +++ b/toolchain/parse/testdata/if_expr/basic.carbon @@ -17,7 +17,7 @@ fn F(b: bool, x: i32, y: i32) -> bool { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, @@ -29,7 +29,7 @@ fn F(b: bool, x: i32, y: i32) -> bool { // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'y'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 13}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 13}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 18}, diff --git a/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon b/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon index e6940930704e..93202b8aa04b 100644 --- a/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon b/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon index e859aa06a52f..1df52137e5e0 100644 --- a/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/if_expr/fail_else_missing.carbon b/toolchain/parse/testdata/if_expr/fail_else_missing.carbon index d9e47f951dd1..1ca688731049 100644 --- a/toolchain/parse/testdata/if_expr/fail_else_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_else_missing.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon b/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon index 979b7d52656a..e8c1a0d74d82 100644 --- a/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/if_expr/fail_then_missing.carbon b/toolchain/parse/testdata/if_expr/fail_then_missing.carbon index 09c91af07cd9..1e220f1f7d35 100644 --- a/toolchain/parse/testdata/if_expr/fail_then_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_then_missing.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon b/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon index 49f52823761b..8686ff8330c9 100644 --- a/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon +++ b/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon @@ -29,8 +29,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, // CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, diff --git a/toolchain/parse/testdata/if_expr/in_type.carbon b/toolchain/parse/testdata/if_expr/in_type.carbon index 74a9e2e857a0..50edb40c96b6 100644 --- a/toolchain/parse/testdata/if_expr/in_type.carbon +++ b/toolchain/parse/testdata/if_expr/in_type.carbon @@ -25,8 +25,8 @@ fn F() -> if true then i32 else i32* { // CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, // CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, diff --git a/toolchain/parse/testdata/if_expr/precedence.carbon b/toolchain/parse/testdata/if_expr/precedence.carbon index b52ace6e1db2..ffc16c938545 100644 --- a/toolchain/parse/testdata/if_expr/precedence.carbon +++ b/toolchain/parse/testdata/if_expr/precedence.carbon @@ -17,11 +17,11 @@ fn F(b: bool) -> bool { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10}, diff --git a/toolchain/parse/testdata/let/let.carbon b/toolchain/parse/testdata/let/let.carbon index 9a43b757cfc0..8552d3245027 100644 --- a/toolchain/parse/testdata/let/let.carbon +++ b/toolchain/parse/testdata/let/let.carbon @@ -25,8 +25,8 @@ fn F() { // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 's'}, diff --git a/toolchain/parse/testdata/let/let_tuple.carbon b/toolchain/parse/testdata/let/let_tuple.carbon index a622d8fa9dfe..091b59602f50 100644 --- a/toolchain/parse/testdata/let/let_tuple.carbon +++ b/toolchain/parse/testdata/let/let_tuple.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, diff --git a/toolchain/parse/testdata/let/missing_value.carbon b/toolchain/parse/testdata/let/missing_value.carbon index f5aedb8a88a5..5d6ff3ff215e 100644 --- a/toolchain/parse/testdata/let/missing_value.carbon +++ b/toolchain/parse/testdata/let/missing_value.carbon @@ -28,8 +28,8 @@ interface I { // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, diff --git a/toolchain/parse/testdata/match/fail_cases_after_default.carbon b/toolchain/parse/testdata/match/fail_cases_after_default.carbon index 06204cc39314..16a7634b9051 100644 --- a/toolchain/parse/testdata/match/fail_cases_after_default.carbon +++ b/toolchain/parse/testdata/match/fail_cases_after_default.carbon @@ -36,8 +36,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon b/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon index e52c27041b77..7056cb94f1ed 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon @@ -29,8 +29,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon b/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon index b7b07b114625..8525d0f58e3e 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon @@ -24,8 +24,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon b/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon index 2aac0e801fa4..d7a9c69a1314 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon @@ -25,8 +25,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_cases.carbon b/toolchain/parse/testdata/match/fail_missing_cases.carbon index 65439a0e1233..8e42cdf1ea0a 100644 --- a/toolchain/parse/testdata/match/fail_missing_cases.carbon +++ b/toolchain/parse/testdata/match/fail_missing_cases.carbon @@ -23,8 +23,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_cases_block.carbon b/toolchain/parse/testdata/match/fail_missing_cases_block.carbon index ed93173a2d16..5d7fc2671bee 100644 --- a/toolchain/parse/testdata/match/fail_missing_cases_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_cases_block.carbon @@ -22,8 +22,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon b/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon index c36dc731d80e..72fec37e7c1c 100644 --- a/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon +++ b/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon @@ -24,8 +24,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon b/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon index b75e58f2d583..1828a2031bfe 100644 --- a/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon @@ -24,8 +24,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon b/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon index 1ae02bdcfbba..0ce87bb41515 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon @@ -28,8 +28,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon b/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon index f58ff601dd3d..f49cdbcf16cb 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon @@ -28,8 +28,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon b/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon index 813788cfdbd8..fa31365eb01e 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon @@ -30,8 +30,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon b/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon index 579c7a7ca097..5ec65ea7a58b 100644 --- a/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon +++ b/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon @@ -24,8 +24,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon b/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon index f877698cb2d3..81f276846805 100644 --- a/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon +++ b/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon @@ -57,8 +57,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/match/match.carbon b/toolchain/parse/testdata/match/match.carbon index 4510af33f0d3..817224c3702b 100644 --- a/toolchain/parse/testdata/match/match.carbon +++ b/toolchain/parse/testdata/match/match.carbon @@ -24,8 +24,8 @@ fn f() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'f'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/member_access/compound.carbon b/toolchain/parse/testdata/member_access/compound.carbon index 7f2d5a7cb0db..c3940df5c115 100644 --- a/toolchain/parse/testdata/member_access/compound.carbon +++ b/toolchain/parse/testdata/member_access/compound.carbon @@ -18,8 +18,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, diff --git a/toolchain/parse/testdata/member_access/fail_keyword.carbon b/toolchain/parse/testdata/member_access/fail_keyword.carbon index 63b1b43db45b..0ebc66571648 100644 --- a/toolchain/parse/testdata/member_access/fail_keyword.carbon +++ b/toolchain/parse/testdata/member_access/fail_keyword.carbon @@ -46,8 +46,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'self', has_error: yes}, diff --git a/toolchain/parse/testdata/member_access/keyword.carbon b/toolchain/parse/testdata/member_access/keyword.carbon index 913f95142e80..187d2b3823d4 100644 --- a/toolchain/parse/testdata/member_access/keyword.carbon +++ b/toolchain/parse/testdata/member_access/keyword.carbon @@ -18,8 +18,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'BaseName', text: 'base'}, diff --git a/toolchain/parse/testdata/member_access/simple.carbon b/toolchain/parse/testdata/member_access/simple.carbon index dbfc02b89248..a1e2708db0eb 100644 --- a/toolchain/parse/testdata/member_access/simple.carbon +++ b/toolchain/parse/testdata/member_access/simple.carbon @@ -20,11 +20,11 @@ fn F(a: T) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, diff --git a/toolchain/parse/testdata/namespace/args.carbon b/toolchain/parse/testdata/namespace/args.carbon index 0572d9a65aa3..6e22b79786d3 100644 --- a/toolchain/parse/testdata/namespace/args.carbon +++ b/toolchain/parse/testdata/namespace/args.carbon @@ -16,8 +16,8 @@ namespace Foo(); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/namespace/basic.carbon b/toolchain/parse/testdata/namespace/basic.carbon index a61eee24e7e1..598bae31098a 100644 --- a/toolchain/parse/testdata/namespace/basic.carbon +++ b/toolchain/parse/testdata/namespace/basic.carbon @@ -22,8 +22,8 @@ fn Bar() { // CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Foo'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Baz'}, diff --git a/toolchain/parse/testdata/namespace/local.carbon b/toolchain/parse/testdata/namespace/local.carbon index 60964f739a10..63c228a9e0a6 100644 --- a/toolchain/parse/testdata/namespace/local.carbon +++ b/toolchain/parse/testdata/namespace/local.carbon @@ -18,8 +18,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'N'}, diff --git a/toolchain/parse/testdata/namespace/nested.carbon b/toolchain/parse/testdata/namespace/nested.carbon index ad896f56887d..b370fbcb294e 100644 --- a/toolchain/parse/testdata/namespace/nested.carbon +++ b/toolchain/parse/testdata/namespace/nested.carbon @@ -32,8 +32,8 @@ fn Foo.Bar.Baz() { // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Bar'}, // CHECK:STDOUT: {kind: 'NameQualifierWithoutParams', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Foo'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Bar'}, diff --git a/toolchain/parse/testdata/operators/assign.carbon b/toolchain/parse/testdata/operators/assign.carbon index e567f1b49f28..5369098af893 100644 --- a/toolchain/parse/testdata/operators/assign.carbon +++ b/toolchain/parse/testdata/operators/assign.carbon @@ -31,8 +31,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, diff --git a/toolchain/parse/testdata/operators/associative.carbon b/toolchain/parse/testdata/operators/associative.carbon index e35aeea1b47f..aaafe4146551 100644 --- a/toolchain/parse/testdata/operators/associative.carbon +++ b/toolchain/parse/testdata/operators/associative.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fail_chained_assign.carbon b/toolchain/parse/testdata/operators/fail_chained_assign.carbon index 4a7014f57a98..89c2db998dbe 100644 --- a/toolchain/parse/testdata/operators/fail_chained_assign.carbon +++ b/toolchain/parse/testdata/operators/fail_chained_assign.carbon @@ -25,8 +25,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, diff --git a/toolchain/parse/testdata/operators/fail_postincrement.carbon b/toolchain/parse/testdata/operators/fail_postincrement.carbon index 68360d2b7565..d942434e3bd1 100644 --- a/toolchain/parse/testdata/operators/fail_postincrement.carbon +++ b/toolchain/parse/testdata/operators/fail_postincrement.carbon @@ -28,8 +28,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, diff --git a/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon b/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon index a783c3566eda..c35eae6add52 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fail_precedence_as.carbon b/toolchain/parse/testdata/operators/fail_precedence_as.carbon index 343a53f39cc5..e1f1c6dae400 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_as.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_as.carbon @@ -58,11 +58,11 @@ fn F(n: i32) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, // CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fail_precedence_assign.carbon b/toolchain/parse/testdata/operators/fail_precedence_assign.carbon index bc3fb389b09c..9881f7045795 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_assign.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_assign.carbon @@ -43,8 +43,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, diff --git a/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon b/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon index 1667de02841f..eb792157a9c5 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fail_precedence_where.carbon b/toolchain/parse/testdata/operators/fail_precedence_where.carbon index 8c6cffe14606..cb6ad7e2c318 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_where.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_where.carbon @@ -103,8 +103,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AndWhere'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, // CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, @@ -125,8 +125,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'WhereOr'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -144,8 +144,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'EqualsWhere'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'V'}, @@ -165,8 +165,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'WhereNEq'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'W'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -184,8 +184,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'LessRequirement'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -201,8 +201,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AsWhere'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Z'}, @@ -222,8 +222,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'WhereAs'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'S'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -241,8 +241,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AsInArgument'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'R'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -258,8 +258,8 @@ fn GreaterInArgument() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'GreaterInArgument'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Q'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon b/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon index 4e5f09b5f623..8d81ae29809c 100644 --- a/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon +++ b/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon @@ -20,8 +20,8 @@ fn F() -> const const i32* { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, // CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 3}, diff --git a/toolchain/parse/testdata/operators/fail_variety.carbon b/toolchain/parse/testdata/operators/fail_variety.carbon index 827d95c61340..8b8e21c6863f 100644 --- a/toolchain/parse/testdata/operators/fail_variety.carbon +++ b/toolchain/parse/testdata/operators/fail_variety.carbon @@ -37,8 +37,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/operators/fixity_in_call.carbon b/toolchain/parse/testdata/operators/fixity_in_call.carbon index b753d04dd7f4..f28709d4be2e 100644 --- a/toolchain/parse/testdata/operators/fixity_in_call.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_call.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, // CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/fixity_in_params.carbon b/toolchain/parse/testdata/operators/fixity_in_params.carbon index 05e183c2de73..5ce09a13501a 100644 --- a/toolchain/parse/testdata/operators/fixity_in_params.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_params.carbon @@ -16,7 +16,7 @@ fn F(p: i32*, n: i32) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'p'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, @@ -25,7 +25,7 @@ fn F(p: i32*, n: i32) { // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 10}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, diff --git a/toolchain/parse/testdata/operators/fixity_in_var.carbon b/toolchain/parse/testdata/operators/fixity_in_var.carbon index 8cb5e0fad5e7..b55500d56a8e 100644 --- a/toolchain/parse/testdata/operators/fixity_in_var.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_var.carbon @@ -18,8 +18,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'q'}, diff --git a/toolchain/parse/testdata/operators/fixity_with_assign.carbon b/toolchain/parse/testdata/operators/fixity_with_assign.carbon index e685cee7d7bd..cb81ab183467 100644 --- a/toolchain/parse/testdata/operators/fixity_with_assign.carbon +++ b/toolchain/parse/testdata/operators/fixity_with_assign.carbon @@ -20,8 +20,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, diff --git a/toolchain/parse/testdata/operators/infix.carbon b/toolchain/parse/testdata/operators/infix.carbon index 972fcc8956cf..082803de1f02 100644 --- a/toolchain/parse/testdata/operators/infix.carbon +++ b/toolchain/parse/testdata/operators/infix.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, diff --git a/toolchain/parse/testdata/operators/postfix_repeat.carbon b/toolchain/parse/testdata/operators/postfix_repeat.carbon index 59e996bea6c0..4a02ff666ff0 100644 --- a/toolchain/parse/testdata/operators/postfix_repeat.carbon +++ b/toolchain/parse/testdata/operators/postfix_repeat.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/precedence_as.carbon b/toolchain/parse/testdata/operators/precedence_as.carbon index 4480f7baf3f7..45327621b128 100644 --- a/toolchain/parse/testdata/operators/precedence_as.carbon +++ b/toolchain/parse/testdata/operators/precedence_as.carbon @@ -21,11 +21,11 @@ fn F(n: i32) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'n'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, // CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/precedence_assign.carbon b/toolchain/parse/testdata/operators/precedence_assign.carbon index 11771782832a..23827d22a570 100644 --- a/toolchain/parse/testdata/operators/precedence_assign.carbon +++ b/toolchain/parse/testdata/operators/precedence_assign.carbon @@ -22,11 +22,11 @@ fn F(c: bool) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'c'}, // CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, diff --git a/toolchain/parse/testdata/operators/precedence_not.carbon b/toolchain/parse/testdata/operators/precedence_not.carbon index f730d6b60444..ad4fcc95124b 100644 --- a/toolchain/parse/testdata/operators/precedence_not.carbon +++ b/toolchain/parse/testdata/operators/precedence_not.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/precedence_unary.carbon b/toolchain/parse/testdata/operators/precedence_unary.carbon index aec9c980192d..a3958ec90a83 100644 --- a/toolchain/parse/testdata/operators/precedence_unary.carbon +++ b/toolchain/parse/testdata/operators/precedence_unary.carbon @@ -22,12 +22,12 @@ fn F(p: i32*) { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'p'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, // CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/precedence_where.carbon b/toolchain/parse/testdata/operators/precedence_where.carbon index 67dc431ee8da..8f6142b40fa2 100644 --- a/toolchain/parse/testdata/operators/precedence_where.carbon +++ b/toolchain/parse/testdata/operators/precedence_where.carbon @@ -21,7 +21,7 @@ fn UnaryMinus(W:! -P where -Q impls -R); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'PostfixStar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, @@ -35,11 +35,11 @@ fn UnaryMinus(W:! -P where -Q impls -R); // CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 7}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 11}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 15}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 18}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Ampersand'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'U'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'J'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, @@ -54,11 +54,11 @@ fn UnaryMinus(W:! -P where -Q impls -R); // CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 7}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 12}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 16}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 19}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'BinaryPlus'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'V'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'M'}, @@ -73,11 +73,11 @@ fn UnaryMinus(W:! -P where -Q impls -R); // CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 7}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 12}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 16}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 19}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'UnaryMinus'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'W'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'P'}, // CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, @@ -89,7 +89,7 @@ fn UnaryMinus(W:! -P where -Q impls -R); // CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 9}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 13}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/operators/prefix_repeat.carbon b/toolchain/parse/testdata/operators/prefix_repeat.carbon index c58cdd9fcc84..ca9feed7b8cd 100644 --- a/toolchain/parse/testdata/operators/prefix_repeat.carbon +++ b/toolchain/parse/testdata/operators/prefix_repeat.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, // CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/spaceship.carbon b/toolchain/parse/testdata/operators/spaceship.carbon index 622f17c653cc..2cead41a7baa 100644 --- a/toolchain/parse/testdata/operators/spaceship.carbon +++ b/toolchain/parse/testdata/operators/spaceship.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, diff --git a/toolchain/parse/testdata/operators/three_stars.carbon b/toolchain/parse/testdata/operators/three_stars.carbon index 43457e8da45a..b135cafe4ba2 100644 --- a/toolchain/parse/testdata/operators/three_stars.carbon +++ b/toolchain/parse/testdata/operators/three_stars.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, // CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, diff --git a/toolchain/parse/testdata/operators/unary.carbon b/toolchain/parse/testdata/operators/unary.carbon index e336a4255520..df58116db441 100644 --- a/toolchain/parse/testdata/operators/unary.carbon +++ b/toolchain/parse/testdata/operators/unary.carbon @@ -29,8 +29,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, @@ -49,8 +49,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, diff --git a/toolchain/parse/testdata/package_expr/fail_standalone.carbon b/toolchain/parse/testdata/package_expr/fail_standalone.carbon index 41607d3969e7..dd942377765d 100644 --- a/toolchain/parse/testdata/package_expr/fail_standalone.carbon +++ b/toolchain/parse/testdata/package_expr/fail_standalone.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, // CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/packages/import/fail_after_decl.carbon b/toolchain/parse/testdata/packages/import/fail_after_decl.carbon index 771d47295cc7..6931ee5d3b6d 100644 --- a/toolchain/parse/testdata/packages/import/fail_after_decl.carbon +++ b/toolchain/parse/testdata/packages/import/fail_after_decl.carbon @@ -24,8 +24,8 @@ import B; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, // CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon b/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon index 98131dc9f2d9..905a89af74a5 100644 --- a/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon +++ b/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon @@ -48,8 +48,8 @@ import G; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, // CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, @@ -59,8 +59,8 @@ import G; // CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'E'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, // CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon index c47f72ef69f0..23ad5285b3fc 100644 --- a/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon @@ -41,8 +41,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, // CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon index 35756b0e03a2..233a0cb9d10d 100644 --- a/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon @@ -67,8 +67,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, @@ -82,8 +82,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, diff --git a/toolchain/parse/testdata/packages/package/fail_after_decl.carbon b/toolchain/parse/testdata/packages/package/fail_after_decl.carbon index 9135cab09100..fa0a322a7c52 100644 --- a/toolchain/parse/testdata/packages/package/fail_after_decl.carbon +++ b/toolchain/parse/testdata/packages/package/fail_after_decl.carbon @@ -24,8 +24,8 @@ package B; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, // CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, // CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon index d2ac1830782e..7ca4ff846638 100644 --- a/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon @@ -69,8 +69,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, // CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, @@ -88,8 +88,8 @@ fn F() { // CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, // CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, diff --git a/toolchain/parse/testdata/pointer/const_pointer.carbon b/toolchain/parse/testdata/pointer/const_pointer.carbon index 80b9b7fedbba..a2bd2198647b 100644 --- a/toolchain/parse/testdata/pointer/const_pointer.carbon +++ b/toolchain/parse/testdata/pointer/const_pointer.carbon @@ -17,8 +17,8 @@ fn C() -> const (i32*) { return C(); } // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'A'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, @@ -32,8 +32,8 @@ fn C() -> const (i32*) { return C(); } // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'B'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, @@ -49,8 +49,8 @@ fn C() -> const (i32*) { return C(); } // CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'C'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, diff --git a/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon b/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon index 1a0da65dcf7c..05d79dc8e3e6 100644 --- a/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon +++ b/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon @@ -21,8 +21,8 @@ fn F() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon b/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon index 7c1a9f57c0a4..a8cfc9f87bc8 100644 --- a/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon +++ b/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon @@ -63,8 +63,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, // CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, diff --git a/toolchain/parse/testdata/pointer/pointer_type.carbon b/toolchain/parse/testdata/pointer/pointer_type.carbon index f3efc75992e0..18d4148a9815 100644 --- a/toolchain/parse/testdata/pointer/pointer_type.carbon +++ b/toolchain/parse/testdata/pointer/pointer_type.carbon @@ -21,12 +21,12 @@ var T: type = if true then i32* else f64*; // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'p'}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 6}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 3}, diff --git a/toolchain/parse/testdata/pointer/pointer_value.carbon b/toolchain/parse/testdata/pointer/pointer_value.carbon index d18b32f447b5..06c23f5ccfd5 100644 --- a/toolchain/parse/testdata/pointer/pointer_value.carbon +++ b/toolchain/parse/testdata/pointer/pointer_value.carbon @@ -20,8 +20,8 @@ fn F() -> i32 { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/return/basic.carbon b/toolchain/parse/testdata/return/basic.carbon index bc1c57c9f12e..98c31c2bc847 100644 --- a/toolchain/parse/testdata/return/basic.carbon +++ b/toolchain/parse/testdata/return/basic.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, // CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 2}, diff --git a/toolchain/parse/testdata/return/expr.carbon b/toolchain/parse/testdata/return/expr.carbon index 30e3a404e766..20abf3a10514 100644 --- a/toolchain/parse/testdata/return/expr.carbon +++ b/toolchain/parse/testdata/return/expr.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, diff --git a/toolchain/parse/testdata/return/fail_expr_no_semi.carbon b/toolchain/parse/testdata/return/fail_expr_no_semi.carbon index 5ef845d07bc4..528132dbb599 100644 --- a/toolchain/parse/testdata/return/fail_expr_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_expr_no_semi.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, diff --git a/toolchain/parse/testdata/return/fail_no_semi.carbon b/toolchain/parse/testdata/return/fail_no_semi.carbon index 4ffa13762468..5257ec19b496 100644 --- a/toolchain/parse/testdata/return/fail_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_no_semi.carbon @@ -25,8 +25,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, diff --git a/toolchain/parse/testdata/return/fail_returned_no_var.carbon b/toolchain/parse/testdata/return/fail_returned_no_var.carbon index c6bb1d35b5eb..456a051f7911 100644 --- a/toolchain/parse/testdata/return/fail_returned_no_var.carbon +++ b/toolchain/parse/testdata/return/fail_returned_no_var.carbon @@ -21,8 +21,8 @@ fn F() -> String { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'String'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/return/fail_var_no_semi.carbon b/toolchain/parse/testdata/return/fail_var_no_semi.carbon index e944a647acab..018323c3349b 100644 --- a/toolchain/parse/testdata/return/fail_var_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_var_no_semi.carbon @@ -21,8 +21,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, // CHECK:STDOUT: {kind: 'ReturnVarModifier', text: 'var'}, diff --git a/toolchain/parse/testdata/return/returned_var.carbon b/toolchain/parse/testdata/return/returned_var.carbon index 227b3532b410..78ebac7df4fc 100644 --- a/toolchain/parse/testdata/return/returned_var.carbon +++ b/toolchain/parse/testdata/return/returned_var.carbon @@ -18,8 +18,8 @@ fn F() -> String { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'String'}, // CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, diff --git a/toolchain/parse/testdata/tuple/nested.carbon b/toolchain/parse/testdata/tuple/nested.carbon index da06cacc817d..016922dbb949 100644 --- a/toolchain/parse/testdata/tuple/nested.carbon +++ b/toolchain/parse/testdata/tuple/nested.carbon @@ -10,6 +10,8 @@ var y: ((), (), ()); +var (a: (), (b: (), c: ())); + // CHECK:STDOUT: - filename: nested.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, @@ -28,5 +30,26 @@ var y: ((), (), ()); // CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 12}, // CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 13}, // CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 15}, +// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'a'}, +// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, +// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, +// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, +// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'b'}, +// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, +// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, +// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'c'}, +// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, +// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, +// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, +// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 18}, +// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 19}, +// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 21}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/var/var.carbon b/toolchain/parse/testdata/var/var.carbon index 33af22ae8ad8..565b05d8b59b 100644 --- a/toolchain/parse/testdata/var/var.carbon +++ b/toolchain/parse/testdata/var/var.carbon @@ -33,8 +33,8 @@ fn F() { // CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 6}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 's'}, diff --git a/toolchain/parse/testdata/var/var_tuple.carbon b/toolchain/parse/testdata/var/var_tuple.carbon index 01b6042a006c..b4392a7f987a 100644 --- a/toolchain/parse/testdata/var/var_tuple.carbon +++ b/toolchain/parse/testdata/var/var_tuple.carbon @@ -17,8 +17,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, diff --git a/toolchain/parse/testdata/where_expr/basic.carbon b/toolchain/parse/testdata/where_expr/basic.carbon index 7bba3c30996f..ef4906e05b24 100644 --- a/toolchain/parse/testdata/where_expr/basic.carbon +++ b/toolchain/parse/testdata/where_expr/basic.carbon @@ -25,7 +25,7 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -35,7 +35,7 @@ fn F() { // CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 4}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, // CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'I'}, @@ -66,8 +66,8 @@ fn F() { // CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'U'}, diff --git a/toolchain/parse/testdata/where_expr/designators.carbon b/toolchain/parse/testdata/where_expr/designators.carbon index 1d476ea39129..9fbe5d5cbe8d 100644 --- a/toolchain/parse/testdata/where_expr/designators.carbon +++ b/toolchain/parse/testdata/where_expr/designators.carbon @@ -72,8 +72,8 @@ var x: i32 = . // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'Success'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, @@ -89,8 +89,8 @@ var x: i32 = . // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'FailNumeric'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '1', has_error: yes}, // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, @@ -103,8 +103,8 @@ var x: i32 = . // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'FailKeyword'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'base', has_error: yes}, // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, @@ -117,8 +117,8 @@ var x: i32 = . // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'FailEmpty'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, @@ -131,8 +131,8 @@ var x: i32 = . // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'FailStar'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '*', has_error: yes}, // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, diff --git a/toolchain/parse/testdata/where_expr/fail_rewrite.carbon b/toolchain/parse/testdata/where_expr/fail_rewrite.carbon index 12dd59cba259..e4be56efbbc5 100644 --- a/toolchain/parse/testdata/where_expr/fail_rewrite.carbon +++ b/toolchain/parse/testdata/where_expr/fail_rewrite.carbon @@ -72,14 +72,14 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'NotDesignator'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, // CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 8}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -88,7 +88,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'DesignatorInParens'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'V'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -98,7 +98,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 4}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 7}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 11}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 11}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -107,7 +107,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'DotSelf'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'W'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -115,7 +115,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -124,7 +124,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'DotKeyword'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'W'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -132,7 +132,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -141,7 +141,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'PostfixAfterDesignator'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'X'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -150,7 +150,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 6}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 10}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 10}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -159,7 +159,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'BinaryOpAfterDesignator'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'N'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -170,7 +170,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 12}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 12}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -179,7 +179,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AfterAnd'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Z'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Q'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -192,7 +192,7 @@ fn AfterAnd(Z:! Q where .R impls S and () = .A); // CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 10}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 14}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 14}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/where_expr/where_and.carbon b/toolchain/parse/testdata/where_expr/where_and.carbon index c447e1ca2f10..36f2b537feb1 100644 --- a/toolchain/parse/testdata/where_expr/where_and.carbon +++ b/toolchain/parse/testdata/where_expr/where_and.carbon @@ -43,7 +43,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'OneAnd'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -59,11 +59,11 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 13}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 17}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 17}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 20}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'TwoAnd'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -84,7 +84,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 18}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 22}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 22}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 25}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -93,14 +93,14 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AndPrefix'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'T'}, // CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, // CHECK:STDOUT: {kind: 'InvalidParse', text: 'and', has_error: yes}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 4}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 8}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 8}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -109,7 +109,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AndSuffix'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Y'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -121,7 +121,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 9}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 13}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 13}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] @@ -130,7 +130,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'AndEarly'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Z'}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, // CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, @@ -138,7 +138,7 @@ fn AndEarly(Z:! L where .M and N); // CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, // CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, // CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':!', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 9}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 9}, // CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/while/basic.carbon b/toolchain/parse/testdata/while/basic.carbon index 73d3d8ead90a..bf76092d677e 100644 --- a/toolchain/parse/testdata/while/basic.carbon +++ b/toolchain/parse/testdata/while/basic.carbon @@ -24,8 +24,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/while/fail_missing_cond.carbon b/toolchain/parse/testdata/while/fail_missing_cond.carbon index 851e803623b1..a54ecbf625f5 100644 --- a/toolchain/parse/testdata/while/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/while/fail_missing_cond.carbon @@ -22,8 +22,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhileConditionStart', text: 'while', has_error: yes}, // CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, diff --git a/toolchain/parse/testdata/while/fail_no_semi.carbon b/toolchain/parse/testdata/while/fail_no_semi.carbon index 1480b7e0a100..b00c322c0355 100644 --- a/toolchain/parse/testdata/while/fail_no_semi.carbon +++ b/toolchain/parse/testdata/while/fail_no_semi.carbon @@ -32,8 +32,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/testdata/while/fail_unbraced.carbon b/toolchain/parse/testdata/while/fail_unbraced.carbon index c19903aa9087..20b093f10879 100644 --- a/toolchain/parse/testdata/while/fail_unbraced.carbon +++ b/toolchain/parse/testdata/while/fail_unbraced.carbon @@ -23,8 +23,8 @@ fn F() { // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, // CHECK:STDOUT: {kind: 'IdentifierNameBeforeParams', text: 'F'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, +// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, // CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, diff --git a/toolchain/parse/tree_test.cpp b/toolchain/parse/tree_test.cpp index 57937f34b07a..c4ea99ca56ae 100644 --- a/toolchain/parse/tree_test.cpp +++ b/toolchain/parse/tree_test.cpp @@ -98,10 +98,10 @@ TEST_F(TreeTest, PrintPostorderAsYAML) { ElementsAre(Pair("kind", "FunctionIntroducer"), Pair("text", "fn"))), Yaml::Mapping(ElementsAre(Pair("kind", "IdentifierNameBeforeParams"), Pair("text", "F"))), - Yaml::Mapping( - ElementsAre(Pair("kind", "TuplePatternStart"), Pair("text", "("))), - Yaml::Mapping(ElementsAre(Pair("kind", "TuplePattern"), Pair("text", ")"), - Pair("subtree_size", "2"))), + Yaml::Mapping(ElementsAre(Pair("kind", "ExplicitParamListStart"), + Pair("text", "("))), + Yaml::Mapping(ElementsAre(Pair("kind", "ExplicitParamList"), + Pair("text", ")"), Pair("subtree_size", "2"))), Yaml::Mapping(ElementsAre(Pair("kind", "FunctionDecl"), Pair("text", ";"), Pair("subtree_size", "5"))), Yaml::Mapping(ElementsAre(Pair("kind", "FileEnd"), Pair("text", ""))))); @@ -122,8 +122,8 @@ TEST_F(TreeTest, PrintPreorderAsYAML) { tree_and_subtrees.PrintPreorder(print_stream); auto param_list = Yaml::Sequence(ElementsAre(Yaml::Mapping( - ElementsAre(Pair("node_index", "3"), Pair("kind", "TuplePatternStart"), - Pair("text", "("))))); + ElementsAre(Pair("node_index", "3"), + Pair("kind", "ExplicitParamListStart"), Pair("text", "("))))); auto function_decl = Yaml::Sequence(ElementsAre( Yaml::Mapping(ElementsAre(Pair("node_index", "1"), @@ -133,8 +133,8 @@ TEST_F(TreeTest, PrintPreorderAsYAML) { Pair("kind", "IdentifierNameBeforeParams"), Pair("text", "F"))), Yaml::Mapping(ElementsAre(Pair("node_index", "4"), - Pair("kind", "TuplePattern"), Pair("text", ")"), - Pair("subtree_size", "2"), + Pair("kind", "ExplicitParamList"), + Pair("text", ")"), Pair("subtree_size", "2"), Pair("children", param_list))))); auto file = Yaml::Sequence(ElementsAre( diff --git a/toolchain/parse/typed_nodes.h b/toolchain/parse/typed_nodes.h index f93f3e7cf436..7d244fed3128 100644 --- a/toolchain/parse/typed_nodes.h +++ b/toolchain/parse/typed_nodes.h @@ -169,7 +169,7 @@ struct NameQualifierWithParams { IdentifierNameBeforeParamsId name; std::optional implicit_params; - std::optional params; + std::optional params; Lex::PeriodTokenIndex token; }; @@ -190,7 +190,7 @@ struct DeclName { qualifiers; AnyNonExprIdentifierNameId name; std::optional implicit_params; - std::optional params; + std::optional params; }; // Library, package, import, export @@ -356,7 +356,7 @@ using TuplePatternStart = using PatternListComma = LeafNode; -// A parameter list or tuple pattern: `(a: i32, b: i32)`. +// A tuple pattern that isn't an explicit parameter list: `(a: i32, b: i32)`. struct TuplePattern { static constexpr auto Kind = NodeKind::TuplePattern.Define({.category = NodeCategory::Pattern, @@ -367,6 +367,19 @@ struct TuplePattern { Lex::CloseParenTokenIndex token; }; +using ExplicitParamListStart = + LeafNode; + +// An explicit parameter list: `(a: i32, b: i32)`. +struct ExplicitParamList { + static constexpr auto Kind = NodeKind::ExplicitParamList.Define( + {.bracketed_by = ExplicitParamListStart::Kind}); + + ExplicitParamListStartId left_paren; + CommaSeparatedList params; + Lex::CloseParenTokenIndex token; +}; + using ImplicitParamListStart = LeafNode; @@ -1149,7 +1162,7 @@ struct ChoiceDefinition { ChoiceDefinitionStartId signature; struct Alternative { AnyNonExprIdentifierNameId name; - std::optional parameters; + std::optional parameters; }; CommaSeparatedList alternatives; Lex::CloseCurlyBraceTokenIndex token; diff --git a/toolchain/parse/typed_nodes_test.cpp b/toolchain/parse/typed_nodes_test.cpp index e1c18d4a4970..6d0c9567129d 100644 --- a/toolchain/parse/typed_nodes_test.cpp +++ b/toolchain/parse/typed_nodes_test.cpp @@ -285,7 +285,7 @@ TEST_F(TypedNodeTest, VerifyExtractTraceClassDecl) { R"Trace(Aggregate [^:]*: begin Aggregate [^:]*: begin Optional [^:]*: begin -NodeIdForKind: TuplePattern consumed +NodeIdForKind: ExplicitParamList consumed Optional [^:]*: found Optional [^:]*: begin NodeIdForKind error: wrong kind IdentifierNameBeforeParams, expected ImplicitParamList diff --git a/toolchain/sem_ir/file.cpp b/toolchain/sem_ir/file.cpp index 6f68fdaa3108..7328f57d900f 100644 --- a/toolchain/sem_ir/file.cpp +++ b/toolchain/sem_ir/file.cpp @@ -197,9 +197,10 @@ auto GetExprCategory(const File& file, InstId inst_id) -> ExprCategory { case RequirementRewrite::Kind: case Return::Kind: case ReturnSlotPattern::Kind: - case Vtable::Kind: case ReturnExpr::Kind: + case TuplePattern::Kind: case VarPattern::Kind: + case Vtable::Kind: return ExprCategory::NotExpr; case ImportRefUnloaded::Kind: diff --git a/toolchain/sem_ir/inst_kind.def b/toolchain/sem_ir/inst_kind.def index f2bd563fdaa6..cf85c828197d 100644 --- a/toolchain/sem_ir/inst_kind.def +++ b/toolchain/sem_ir/inst_kind.def @@ -112,6 +112,7 @@ CARBON_SEM_IR_INST_KIND(TemporaryStorage) CARBON_SEM_IR_INST_KIND(TupleAccess) CARBON_SEM_IR_INST_KIND(TupleInit) CARBON_SEM_IR_INST_KIND(TupleLiteral) +CARBON_SEM_IR_INST_KIND(TuplePattern) CARBON_SEM_IR_INST_KIND(TupleType) CARBON_SEM_IR_INST_KIND(TupleValue) CARBON_SEM_IR_INST_KIND(TypeType) diff --git a/toolchain/sem_ir/stringify_type.cpp b/toolchain/sem_ir/stringify_type.cpp index 97d35776e81c..cc806c40ee19 100644 --- a/toolchain/sem_ir/stringify_type.cpp +++ b/toolchain/sem_ir/stringify_type.cpp @@ -619,6 +619,7 @@ auto StringifyTypeExpr(const SemIR::File& sem_ir, InstId outer_inst_id) case TupleAccess::Kind: case TupleInit::Kind: case TupleLiteral::Kind: + case TuplePattern::Kind: case UnaryOperatorNot::Kind: case ValueAsRef::Kind: case ValueOfInitializer::Kind: diff --git a/toolchain/sem_ir/typed_insts.h b/toolchain/sem_ir/typed_insts.h index 6dc56ab43b5e..b201457c27ca 100644 --- a/toolchain/sem_ir/typed_insts.h +++ b/toolchain/sem_ir/typed_insts.h @@ -1410,6 +1410,16 @@ struct TupleLiteral { InstBlockId elements_id; }; +// A tuple pattern, such as `(x, y: i32)`. +struct TuplePattern { + static constexpr auto Kind = + InstKind::TuplePattern.Define( + {.ir_name = "tuple_pattern", .is_lowered = false}); + + TypeId type_id; + InstBlockId elements_id; +}; + // The type of a tuple. struct TupleType { static constexpr auto Kind = InstKind::TupleType.Define(