From 5e29849393822dcecc0508f6f7dab8d4d5a7a5a4 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Sat, 15 Oct 2022 13:51:59 +0000 Subject: [PATCH] Parser: consolidate handleCaseMatch and endCaseExpression. There was no need for both of these listener callbacks, because they were always called together. Since `beginCaseExpression` is actually used, it makes sense to keep `endCaseExpression` and get rid of `handleCaseMatch`. Change-Id: I544096b2c2b2814e8cc0c8606455855cb77c9e60 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264102 Reviewed-by: Jens Johansen Commit-Queue: Paul Berry --- .../lib/src/parser/forwarding_listener.dart | 9 +-- .../lib/src/parser/listener.dart | 6 +- .../lib/src/parser/parser_impl.dart | 3 +- .../lib/src/parser/stack_listener.dart | 2 +- pkg/analyzer/lib/src/fasta/ast_builder.dart | 68 +++++++++---------- .../test/generated/parser_fasta_listener.dart | 4 +- .../lib/src/fasta/kernel/body_builder.dart | 8 +-- .../fasta/kernel/macro/annotation_parser.dart | 7 +- .../lib/src/fasta/util/parser_ast_helper.dart | 35 ++-------- .../nnbd/issue_40267_case_01.dart.expect | 3 +- ...ssue_40267_case_01.dart.intertwined.expect | 3 +- .../nnbd/issue_40267_case_02.dart.expect | 3 +- ...ssue_40267_case_02.dart.intertwined.expect | 3 +- .../nnbd/issue_40267_case_03.dart.expect | 3 +- ...ssue_40267_case_03.dart.intertwined.expect | 3 +- .../nnbd/issue_40267_case_04.dart.expect | 3 +- ...ssue_40267_case_04.dart.intertwined.expect | 3 +- .../nnbd/issue_40267_case_05.dart.expect | 3 +- ...ssue_40267_case_05.dart.intertwined.expect | 3 +- .../boolean_literal_inside_case.dart.expect | 3 +- ...iteral_inside_case.dart.intertwined.expect | 3 +- .../boolean_literal_inside_cast.dart.expect | 3 +- ...iteral_inside_cast.dart.intertwined.expect | 3 +- ...ean_literal_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...lean_literal_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ..._guarded_insideSwitchStatement.dart.expect | 3 +- ...ideSwitchStatement.dart.intertwined.expect | 3 +- ...nguarded_insideSwitchStatement.dart.expect | 3 +- ...ideSwitchStatement.dart.intertwined.expect | 3 +- ..._guarded_insideSwitchStatement.dart.expect | 3 +- ...ideSwitchStatement.dart.intertwined.expect | 3 +- ...nguarded_insideSwitchStatement.dart.expect | 3 +- ...ideSwitchStatement.dart.intertwined.expect | 3 +- .../patterns/cast_inside_case.dart.expect | 3 +- .../cast_inside_case.dart.intertwined.expect | 3 +- .../cast_inside_extractor_pattern.dart.expect | 3 +- ..._extractor_pattern.dart.intertwined.expect | 3 +- ...actor_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- .../cast_inside_list_pattern.dart.expect | 3 +- ...nside_list_pattern.dart.intertwined.expect | 3 +- .../cast_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- .../cast_inside_logical_and_rhs.dart.expect | 3 +- ...de_logical_and_rhs.dart.intertwined.expect | 3 +- .../cast_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- .../cast_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- .../cast_inside_map_pattern.dart.expect | 3 +- ...inside_map_pattern.dart.intertwined.expect | 3 +- ...t_inside_parenthesized_pattern.dart.expect | 3 +- ...enthesized_pattern.dart.intertwined.expect | 3 +- ...ecord_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...st_inside_record_pattern_named.dart.expect | 3 +- ...cord_pattern_named.dart.intertwined.expect | 3 +- ..._inside_record_pattern_unnamed.dart.expect | 3 +- ...rd_pattern_unnamed.dart.intertwined.expect | 3 +- ...fier_doublyPrefixed_insideCase.dart.expect | 3 +- ...refixed_insideCase.dart.intertwined.expect | 3 +- ...fier_doublyPrefixed_insideCast.dart.expect | 3 +- ...refixed_insideCast.dart.intertwined.expect | 3 +- ...oublyPrefixed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...doublyPrefixed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...onstant_identifier_inside_case.dart.expect | 3 +- ...tifier_inside_case.dart.intertwined.expect | 3 +- ...onstant_identifier_inside_cast.dart.expect | 3 +- ...tifier_inside_cast.dart.intertwined.expect | 3 +- ..._identifier_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...t_identifier_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...fixedWithUnderscore_insideCase.dart.expect | 3 +- ...erscore_insideCase.dart.intertwined.expect | 3 +- ...identifier_prefixed_insideCase.dart.expect | 3 +- ...refixed_insideCase.dart.intertwined.expect | 3 +- ...identifier_prefixed_insideCast.dart.expect | 3 +- ...refixed_insideCast.dart.intertwined.expect | 3 +- ...fier_prefixed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...ifier_prefixed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...nt_list_typed_empty_insideCase.dart.expect | 3 +- ...d_empty_insideCase.dart.intertwined.expect | 3 +- ...nt_list_typed_empty_insideCast.dart.expect | 3 +- ...d_empty_insideCast.dart.intertwined.expect | 3 +- ...t_typed_empty_insideNullAssert.dart.expect | 3 +- ...y_insideNullAssert.dart.intertwined.expect | 3 +- ...st_typed_empty_insideNullCheck.dart.expect | 3 +- ...ty_insideNullCheck.dart.intertwined.expect | 3 +- ...list_typed_nonEmpty_insideCase.dart.expect | 3 +- ...onEmpty_insideCase.dart.intertwined.expect | 3 +- ...list_typed_nonEmpty_insideCast.dart.expect | 3 +- ...onEmpty_insideCast.dart.intertwined.expect | 3 +- ...yped_nonEmpty_insideNullAssert.dart.expect | 3 +- ...y_insideNullAssert.dart.intertwined.expect | 3 +- ...typed_nonEmpty_insideNullCheck.dart.expect | 3 +- ...ty_insideNullCheck.dart.intertwined.expect | 3 +- ..._list_untyped_empty_insideCase.dart.expect | 3 +- ...d_empty_insideCase.dart.intertwined.expect | 3 +- ..._list_untyped_empty_insideCast.dart.expect | 3 +- ...d_empty_insideCast.dart.intertwined.expect | 3 +- ...untyped_empty_insideNullAssert.dart.expect | 3 +- ...y_insideNullAssert.dart.intertwined.expect | 3 +- ..._untyped_empty_insideNullCheck.dart.expect | 3 +- ...ty_insideNullCheck.dart.intertwined.expect | 3 +- ...st_untyped_nonEmpty_insideCase.dart.expect | 3 +- ...onEmpty_insideCase.dart.intertwined.expect | 3 +- ...st_untyped_nonEmpty_insideCast.dart.expect | 3 +- ...onEmpty_insideCast.dart.intertwined.expect | 3 +- ...yped_nonEmpty_insideNullAssert.dart.expect | 3 +- ...y_insideNullAssert.dart.intertwined.expect | 3 +- ...typed_nonEmpty_insideNullCheck.dart.expect | 3 +- ...ty_insideNullCheck.dart.intertwined.expect | 3 +- .../constant_map_typed_insideCase.dart.expect | 3 +- ...p_typed_insideCase.dart.intertwined.expect | 3 +- .../constant_map_typed_insideCast.dart.expect | 3 +- ...p_typed_insideCast.dart.intertwined.expect | 3 +- ...ant_map_typed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...tant_map_typed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...onstant_map_untyped_insideCase.dart.expect | 3 +- ...untyped_insideCase.dart.intertwined.expect | 3 +- ...onstant_map_untyped_insideCast.dart.expect | 3 +- ...untyped_insideCast.dart.intertwined.expect | 3 +- ...t_map_untyped_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...nt_map_untyped_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...nt_objectExpression_insideCase.dart.expect | 3 +- ...ression_insideCase.dart.intertwined.expect | 3 +- ...nt_objectExpression_insideCast.dart.expect | 3 +- ...ression_insideCast.dart.intertwined.expect | 3 +- ...ectExpression_insideNullAssert.dart.expect | 3 +- ...n_insideNullAssert.dart.intertwined.expect | 3 +- ...jectExpression_insideNullCheck.dart.expect | 3 +- ...on_insideNullCheck.dart.intertwined.expect | 3 +- ...stant_parenthesized_insideCase.dart.expect | 3 +- ...hesized_insideCase.dart.intertwined.expect | 3 +- ...stant_parenthesized_insideCast.dart.expect | 3 +- ...hesized_insideCast.dart.intertwined.expect | 3 +- ...parenthesized_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ..._parenthesized_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- .../constant_set_typed_insideCase.dart.expect | 3 +- ...t_typed_insideCase.dart.intertwined.expect | 3 +- .../constant_set_typed_insideCast.dart.expect | 3 +- ...t_typed_insideCast.dart.intertwined.expect | 3 +- ...ant_set_typed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...tant_set_typed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...onstant_set_untyped_insideCase.dart.expect | 3 +- ...untyped_insideCase.dart.intertwined.expect | 3 +- ...onstant_set_untyped_insideCast.dart.expect | 3 +- ...untyped_insideCast.dart.intertwined.expect | 3 +- ...t_set_untyped_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...nt_set_untyped_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- .../double_literal_inside_case.dart.expect | 3 +- ...iteral_inside_case.dart.intertwined.expect | 3 +- .../double_literal_inside_cast.dart.expect | 3 +- ...iteral_inside_cast.dart.intertwined.expect | 3 +- ...ble_literal_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...uble_literal_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../extractor_pattern_inside_cast.dart.expect | 3 +- ...attern_inside_cast.dart.intertwined.expect | 3 +- ...tor_pattern_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...ctor_pattern_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...tractor_pattern_with_type_args.dart.expect | 3 +- ...ern_with_type_args.dart.intertwined.expect | 3 +- ...h_type_args_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...rscore_withTypeArgs_insideCase.dart.expect | 3 +- ...ypeArgs_insideCase.dart.intertwined.expect | 3 +- ...ore_withoutTypeArgs_insideCase.dart.expect | 3 +- ...ypeArgs_insideCase.dart.intertwined.expect | 3 +- ...rscore_withTypeArgs_insideCase.dart.expect | 3 +- ...ypeArgs_insideCase.dart.intertwined.expect | 3 +- ...ore_withoutTypeArgs_insideCase.dart.expect | 3 +- ...ypeArgs_insideCase.dart.intertwined.expect | 3 +- .../final_variable_inside_case.dart.expect | 3 +- ...riable_inside_case.dart.intertwined.expect | 3 +- .../final_variable_inside_cast.dart.expect | 3 +- ...riable_inside_cast.dart.intertwined.expect | 3 +- ...al_variable_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...nal_variable_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../integer_literal_inside_case.dart.expect | 3 +- ...iteral_inside_case.dart.intertwined.expect | 3 +- .../integer_literal_inside_cast.dart.expect | 3 +- ...iteral_inside_cast.dart.intertwined.expect | 3 +- ...ger_literal_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...eger_literal_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../list_pattern_inside_case.dart.expect | 3 +- ...attern_inside_case.dart.intertwined.expect | 3 +- ...list_pattern_inside_case_empty.dart.expect | 3 +- ..._inside_case_empty.dart.intertwined.expect | 3 +- ...n_inside_case_empty_whitespace.dart.expect | 3 +- ...e_empty_whitespace.dart.intertwined.expect | 3 +- ...nside_case_with_type_arguments.dart.expect | 3 +- ...ith_type_arguments.dart.intertwined.expect | 3 +- .../list_pattern_inside_cast.dart.expect | 3 +- ...attern_inside_cast.dart.intertwined.expect | 3 +- ...ist_pattern_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...list_pattern_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...cal_and_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- ...ical_and_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- ...ical_and_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- ...gical_or_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- .../map_pattern_inside_case.dart.expect | 3 +- ...attern_inside_case.dart.intertwined.expect | 3 +- .../map_pattern_inside_case_empty.dart.expect | 3 +- ..._inside_case_empty.dart.intertwined.expect | 3 +- ...nside_case_with_type_arguments.dart.expect | 3 +- ...ith_type_arguments.dart.intertwined.expect | 3 +- .../map_pattern_inside_cast.dart.expect | 3 +- ...attern_inside_cast.dart.intertwined.expect | 3 +- ...map_pattern_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- .../map_pattern_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../null_assert_inside_case.dart.expect | 3 +- ...assert_inside_case.dart.intertwined.expect | 3 +- ...ssert_inside_extractor_pattern.dart.expect | 3 +- ..._extractor_pattern.dart.intertwined.expect | 3 +- ...actor_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...ull_assert_inside_list_pattern.dart.expect | 3 +- ...nside_list_pattern.dart.intertwined.expect | 3 +- ..._assert_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- ..._assert_inside_logical_and_rhs.dart.expect | 3 +- ...de_logical_and_rhs.dart.intertwined.expect | 3 +- ...l_assert_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- ...l_assert_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- ...null_assert_inside_map_pattern.dart.expect | 3 +- ...inside_map_pattern.dart.intertwined.expect | 3 +- ...t_inside_parenthesized_pattern.dart.expect | 3 +- ...enthesized_pattern.dart.intertwined.expect | 3 +- ...ecord_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...rt_inside_record_pattern_named.dart.expect | 3 +- ...cord_pattern_named.dart.intertwined.expect | 3 +- ..._inside_record_pattern_unnamed.dart.expect | 3 +- ...rd_pattern_unnamed.dart.intertwined.expect | 3 +- .../null_check_inside_case.dart.expect | 3 +- ..._check_inside_case.dart.intertwined.expect | 3 +- ...check_inside_extractor_pattern.dart.expect | 3 +- ..._extractor_pattern.dart.intertwined.expect | 3 +- ...actor_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...null_check_inside_list_pattern.dart.expect | 3 +- ...nside_list_pattern.dart.intertwined.expect | 3 +- ...l_check_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- ...l_check_inside_logical_and_rhs.dart.expect | 3 +- ...de_logical_and_rhs.dart.intertwined.expect | 3 +- ...ll_check_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- ...ll_check_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- .../null_check_inside_map_pattern.dart.expect | 3 +- ...inside_map_pattern.dart.intertwined.expect | 3 +- ...k_inside_parenthesized_pattern.dart.expect | 3 +- ...enthesized_pattern.dart.intertwined.expect | 3 +- ...ecord_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...ck_inside_record_pattern_named.dart.expect | 3 +- ...cord_pattern_named.dart.intertwined.expect | 3 +- ..._inside_record_pattern_unnamed.dart.expect | 3 +- ...rd_pattern_unnamed.dart.intertwined.expect | 3 +- .../null_literal_inside_case.dart.expect | 3 +- ...iteral_inside_case.dart.intertwined.expect | 3 +- .../null_literal_inside_cast.dart.expect | 3 +- ...iteral_inside_cast.dart.intertwined.expect | 3 +- ...ull_literal_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...null_literal_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../parenthesized_insideCase.dart.expect | 3 +- ...hesized_insideCase.dart.intertwined.expect | 3 +- ...enthesized_pattern_inside_cast.dart.expect | 3 +- ...attern_inside_cast.dart.intertwined.expect | 3 +- ...zed_pattern_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...ized_pattern_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...tractor_pattern_with_type_args.dart.expect | 3 +- ...ern_with_type_args.dart.intertwined.expect | 3 +- ...ern_with_type_args_inside_cast.dart.expect | 3 +- ...e_args_inside_cast.dart.intertwined.expect | 3 +- ...h_type_args_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...th_type_args_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../record_pattern_inside_case.dart.expect | 3 +- ...attern_inside_case.dart.intertwined.expect | 3 +- ...cord_pattern_inside_case_empty.dart.expect | 3 +- ..._inside_case_empty.dart.intertwined.expect | 3 +- ..._pattern_inside_case_singleton.dart.expect | 3 +- ...ide_case_singleton.dart.intertwined.expect | 3 +- .../record_pattern_inside_cast.dart.expect | 3 +- ...attern_inside_cast.dart.intertwined.expect | 3 +- ...ord_pattern_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...cord_pattern_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../relational_inside_case_equal.dart.expect | 3 +- ..._inside_case_equal.dart.intertwined.expect | 3 +- ...ional_inside_case_greater_than.dart.expect | 3 +- ..._case_greater_than.dart.intertwined.expect | 3 +- ...ide_case_greater_than_or_equal.dart.expect | 3 +- ...ater_than_or_equal.dart.intertwined.expect | 3 +- ...lational_inside_case_less_than.dart.expect | 3 +- ...ide_case_less_than.dart.intertwined.expect | 3 +- ...inside_case_less_than_or_equal.dart.expect | 3 +- ...less_than_or_equal.dart.intertwined.expect | 3 +- ...lational_inside_case_not_equal.dart.expect | 3 +- ...ide_case_not_equal.dart.intertwined.expect | 3 +- ...ional_inside_extractor_pattern.dart.expect | 3 +- ..._extractor_pattern.dart.intertwined.expect | 3 +- ...relational_inside_list_pattern.dart.expect | 3 +- ...nside_list_pattern.dart.intertwined.expect | 3 +- ...ational_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- ...ational_inside_logical_and_rhs.dart.expect | 3 +- ...de_logical_and_rhs.dart.intertwined.expect | 3 +- ...lational_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- ...lational_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- .../relational_inside_map_pattern.dart.expect | 3 +- ...inside_map_pattern.dart.intertwined.expect | 3 +- ...l_inside_parenthesized_pattern.dart.expect | 3 +- ...enthesized_pattern.dart.intertwined.expect | 3 +- ...al_inside_record_pattern_named.dart.expect | 3 +- ...cord_pattern_named.dart.intertwined.expect | 3 +- ..._inside_record_pattern_unnamed.dart.expect | 3 +- ...rd_pattern_unnamed.dart.intertwined.expect | 3 +- .../string_literal_inside_case.dart.expect | 3 +- ...iteral_inside_case.dart.intertwined.expect | 3 +- .../string_literal_inside_cast.dart.expect | 3 +- ...iteral_inside_cast.dart.intertwined.expect | 3 +- ...ing_literal_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...ring_literal_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...ped_final_variable_inside_case.dart.expect | 3 +- ...riable_inside_case.dart.intertwined.expect | 3 +- ...ped_final_variable_inside_cast.dart.expect | 3 +- ...riable_inside_cast.dart.intertwined.expect | 3 +- ...al_variable_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...nal_variable_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- .../typed_variable_inside_case.dart.expect | 3 +- ...riable_inside_case.dart.intertwined.expect | 3 +- .../typed_variable_inside_cast.dart.expect | 3 +- ...riable_inside_cast.dart.intertwined.expect | 3 +- ...ed_variable_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...ped_variable_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ..._variable_named_as_inside_case.dart.expect | 3 +- ...med_as_inside_case.dart.intertwined.expect | 3 +- ..._variable_named_as_inside_cast.dart.expect | 3 +- ...med_as_inside_cast.dart.intertwined.expect | 3 +- ...ed_as_inside_extractor_pattern.dart.expect | 3 +- ..._extractor_pattern.dart.intertwined.expect | 3 +- ...actor_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...e_named_as_inside_list_pattern.dart.expect | 3 +- ...nside_list_pattern.dart.intertwined.expect | 3 +- ...amed_as_inside_logical_and_lhs.dart.expect | 3 +- ...de_logical_and_lhs.dart.intertwined.expect | 3 +- ...amed_as_inside_logical_and_rhs.dart.expect | 3 +- ...de_logical_and_rhs.dart.intertwined.expect | 3 +- ...named_as_inside_logical_or_lhs.dart.expect | 3 +- ...ide_logical_or_lhs.dart.intertwined.expect | 3 +- ...named_as_inside_logical_or_rhs.dart.expect | 3 +- ...ide_logical_or_rhs.dart.intertwined.expect | 3 +- ...le_named_as_inside_map_pattern.dart.expect | 3 +- ...inside_map_pattern.dart.intertwined.expect | 3 +- ...le_named_as_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...ble_named_as_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...s_inside_parenthesized_pattern.dart.expect | 3 +- ...enthesized_pattern.dart.intertwined.expect | 3 +- ...ecord_pattern_implicitly_named.dart.expect | 3 +- ...n_implicitly_named.dart.intertwined.expect | 3 +- ...as_inside_record_pattern_named.dart.expect | 3 +- ...cord_pattern_named.dart.intertwined.expect | 3 +- ..._inside_record_pattern_unnamed.dart.expect | 3 +- ...rd_pattern_unnamed.dart.intertwined.expect | 3 +- .../var_variable_inside_case.dart.expect | 3 +- ...riable_inside_case.dart.intertwined.expect | 3 +- .../var_variable_inside_cast.dart.expect | 3 +- ...riable_inside_cast.dart.intertwined.expect | 3 +- ...ar_variable_inside_null_assert.dart.expect | 3 +- ...inside_null_assert.dart.intertwined.expect | 3 +- ...var_variable_inside_null_check.dart.expect | 3 +- ..._inside_null_check.dart.intertwined.expect | 3 +- ...ypedNamedUnderscore_insideCase.dart.expect | 3 +- ...erscore_insideCase.dart.intertwined.expect | 3 +- .../wildcard_bare_insideCase.dart.expect | 3 +- ...rd_bare_insideCase.dart.intertwined.expect | 3 +- .../wildcard_bare_insideCast.dart.expect | 3 +- ...rd_bare_insideCast.dart.intertwined.expect | 3 +- ...wildcard_bare_insideNullAssert.dart.expect | 3 +- ...e_insideNullAssert.dart.intertwined.expect | 3 +- .../wildcard_bare_insideNullCheck.dart.expect | 3 +- ...re_insideNullCheck.dart.intertwined.expect | 3 +- ...ildcard_final_typed_insideCase.dart.expect | 3 +- ...l_typed_insideCase.dart.intertwined.expect | 3 +- ...ildcard_final_typed_insideCast.dart.expect | 3 +- ...l_typed_insideCast.dart.intertwined.expect | 3 +- ...d_final_typed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...rd_final_typed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- ...dcard_final_untyped_insideCase.dart.expect | 3 +- ...untyped_insideCase.dart.intertwined.expect | 3 +- ...dcard_final_untyped_insideCast.dart.expect | 3 +- ...untyped_insideCast.dart.intertwined.expect | 3 +- ...final_untyped_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ..._final_untyped_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- .../wildcard_typed_insideCase.dart.expect | 3 +- ...d_typed_insideCase.dart.intertwined.expect | 3 +- .../wildcard_typed_insideCast.dart.expect | 3 +- ...d_typed_insideCast.dart.intertwined.expect | 3 +- ...ildcard_typed_insideNullAssert.dart.expect | 3 +- ...d_insideNullAssert.dart.intertwined.expect | 3 +- ...wildcard_typed_insideNullCheck.dart.expect | 3 +- ...ed_insideNullCheck.dart.intertwined.expect | 3 +- .../wildcard_var_insideCase.dart.expect | 3 +- ...ard_var_insideCase.dart.intertwined.expect | 3 +- .../wildcard_var_insideCast.dart.expect | 3 +- ...ard_var_insideCast.dart.intertwined.expect | 3 +- .../wildcard_var_insideNullAssert.dart.expect | 3 +- ...r_insideNullAssert.dart.intertwined.expect | 3 +- .../wildcard_var_insideNullCheck.dart.expect | 3 +- ...ar_insideNullCheck.dart.intertwined.expect | 3 +- pkg/front_end/test/parser_test_listener.dart | 13 +--- 470 files changed, 513 insertions(+), 1022 deletions(-) diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart index 540731abf3d..6b134a2145f 100644 --- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart +++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart @@ -577,8 +577,8 @@ class ForwardingListener implements Listener { } @override - void endCaseExpression(Token? when, Token colon) { - listener?.endCaseExpression(when, colon); + void endCaseExpression(Token caseKeyword, Token? when, Token colon) { + listener?.endCaseExpression(caseKeyword, when, colon); } @override @@ -1291,11 +1291,6 @@ class ForwardingListener implements Listener { listener?.handleBreakStatement(hasTarget, breakKeyword, endToken); } - @override - void handleCaseMatch(Token caseKeyword, Token? when, Token colon) { - listener?.handleCaseMatch(caseKeyword, when, colon); - } - @override void handleCatchBlock(Token? onKeyword, Token? catchKeyword, Token? comma) { listener?.handleCatchBlock(onKeyword, catchKeyword, comma); diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart index 1dd54bf0d7e..6c14e72617f 100644 --- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart +++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart @@ -100,7 +100,7 @@ class Listener implements UnescapeErrorListener { void beginCaseExpression(Token caseKeyword) {} - void endCaseExpression(Token? when, Token colon) { + void endCaseExpression(Token caseKeyword, Token? when, Token colon) { logEvent("CaseExpression"); } @@ -1351,10 +1351,6 @@ class Listener implements UnescapeErrorListener { void beginTryStatement(Token token) {} - void handleCaseMatch(Token caseKeyword, Token? when, Token colon) { - logEvent("CaseMatch"); - } - void beginCatchClause(Token token) {} void endCatchClause(Token token) { diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart index 3ad19539f46..5279680f014 100644 --- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart +++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart @@ -8271,8 +8271,7 @@ class Parser { token = parseExpression(token); } token = ensureColon(token); - listener.endCaseExpression(when, token); - listener.handleCaseMatch(caseKeyword, when, token); + listener.endCaseExpression(caseKeyword, when, token); expressionCount++; peek = peekPastLabels(token.next!); } else if (expressionCount > 0) { diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart index b2d7766e176..e7a29a57ee5 100644 --- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart +++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart @@ -482,7 +482,7 @@ abstract class StackListener extends Listener { } @override - void endCaseExpression(Token? when, Token colon) { + void endCaseExpression(Token caseKeyword, Token? when, Token colon) { debugEvent("CaseExpression"); } diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart index 95467fe19c8..278b01e881a 100644 --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart @@ -893,6 +893,40 @@ class AstBuilder extends StackListener { ); } + @override + void endCaseExpression(Token caseKeyword, Token? when, Token colon) { + assert(optional('case', caseKeyword)); + assert(optional(':', colon)); + debugEvent("CaseMatch"); + + if (_featureSet.isEnabled(Feature.patterns)) { + WhenClauseImpl? whenClause; + if (when != null) { + var expression = pop() as ExpressionImpl; + whenClause = WhenClauseImpl(whenKeyword: when, expression: expression); + } + var pattern = pop() as DartPatternImpl; + push(SwitchPatternCaseImpl( + labels: