Version 3.0.0-4.0.dev

Merge fe968d979ec2363d7a3e51fe4c97cf047976655c into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c0d7484..9b463ff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
 ### Language
 
 - **Breaking change** [#49635][]: Flag additional code as unreachable due to
-  types `Null` and `Never`.  Several unusual constructs that lead to unreachable
+  types `Null` and `Never`. Several unusual constructs that lead to unreachable
   code are now recognized by flow analysis:
 
   - Control flow after an expression of the form `e ?? other` or `e ??= other`,
@@ -33,7 +33,7 @@
   `noSuchMethod`. If a concrete class implements an interface containing a
   member with a name that's private to different library, and does not inherit
   an implementation of that interface member, a invocation of that member will
-  result in an exception getting thrown.  Previously, such attempts would result
+  result in an exception getting thrown. Previously, such attempts would result
   in the call being diverted to the `noSuchMethod` method.
 
   This change closes a loophole in Dart's privacy system, where another library
@@ -48,17 +48,15 @@
   dependencies during top-level type inference.
 
   Previously, some of these dependencies were ignored, based on an analysis
-  determining that they could not influence the inferred type. However,
-  this analysis was complex, differed slightly among tools, and had become
-  much more complex due to other changes (especially, enhanced flow
-  analysis).
+  determining that they could not influence the inferred type. However, this
+  analysis was complex, differed slightly among tools, and had become much more
+  complex due to other changes (especially, enhanced flow analysis).
 
-  With this change, all tools treat these cyclic dependencies in the
-  same way, the analysis is well-understood, and, arguably, the code is
-  more readable.
+  With this change, all tools treat these cyclic dependencies in the same way,
+  the analysis is well-understood, and, arguably, the code is more readable.
 
-  Breakage is mitigated by adding a declared type to one top-level
-  declaration per cycle which is now an error.
+  Breakage is mitigated by adding a declared type to one top-level declaration
+  per cycle which is now an error.
 
 [#50383]: https://github.com/dart-lang/sdk/issues/50383
 
@@ -75,8 +73,8 @@
 
 #### `dart:convert`
 
-- **Breaking change** [#34233][]: The previously deprecated API
-  [`DEFAULT_BUFFER_SIZE`][] in `JsonUtf8Encoder` has been removed.
+- **Breaking change** [#34233]: The previously deprecated API
+  [`DEFAULT_BUFFER_SIZE`] in `JsonUtf8Encoder` has been removed.
 
 [#34233]: https://github.com/dart-lang/sdk/issues/34233
 [`DEFAULT_BUFFER_SIZE`]: https://api.dart.dev/stable/2.17.6/dart-convert/JsonUtf8Encoder/DEFAULT_BUFFER_SIZE-constant.html
@@ -97,11 +95,11 @@
 
 #### `dart:developer`
 
-- **Breaking change** [#34233][]: The previously deprecated APIs
-  `kInvalidParams`, `kExtensionError`, `kExtensionErrorMax`, and
-  `kExtensionErrorMin` in [`ServiceExtensionResponse`][] have been removed. They
-  have been replaced by `invalidParams`, `extensionError`, `extensionErrorMax`,
-  and `extensionErrorMin`.
+- **Breaking change** [#34233]: The previously deprecated APIs `kInvalidParams`,
+  `kExtensionError`, `kExtensionErrorMax`, and `kExtensionErrorMin` in
+  [`ServiceExtensionResponse`] have been removed. They have been replaced by
+  `invalidParams`, `extensionError`, `extensionErrorMax`, and
+  `extensionErrorMin`.
 - Deprecated `UserTag.MAX_USER_TAGS` in favor of `UserTag.maxUserTags`.
 
 [#34233]: https://github.com/dart-lang/sdk/issues/34233
@@ -109,7 +107,7 @@
 
 #### `dart:ffi`
 
-- **Breaking change** [#49935][]:  The runtime type argument of `Pointer` has
+- **Breaking change** [#49935]: The runtime type argument of `Pointer` has
   changed to `Never` in preparation of completely removing the runtime type
   argument. `Pointer.toString` has changed to not report any type argument.
 
@@ -121,17 +119,17 @@
 - Deprecated `registerElement` and `registerElement2` in `Document` and
   `HtmlDocument`. These APIs were based on the deprecated Web Components v0.5
   specification and are not supported by browsers today. These APIs are expected
-  to be deleted in a future release. See the related breaking change
-  request [#49536](https://github.com/dart-lang/sdk/issues/49536).
+  to be deleted in a future release. See the related breaking change request
+  [#49536](https://github.com/dart-lang/sdk/issues/49536).
 
 #### `dart:io`
 
 - **Breaking change** [#49305](https://github.com/dart-lang/sdk/issues/49305):
   Disallow negative or hexadecimal content-length headers.
 - **Breaking change** [#49647](https://github.com/dart-lang/sdk/issues/49647):
-  `File.create` now takes new optional `exclusive` `bool` parameter, and
-  when it is `true` the operation will fail if target file already exists.
-- **Breaking change** [#49878][]: Calling `ResourceHandle.toFile()`,
+  `File.create` now takes new optional `exclusive` `bool` parameter, and when it
+  is `true` the operation will fail if target file already exists.
+- **Breaking change** [#49878]: Calling `ResourceHandle.toFile()`,
   `ResourceHandle.toSocket()`, `ResourceHandle.toRawSocket()` or
   `ResourceHandle.toRawDatagramSocket()`, more than once now throws a
   `StateError`.
@@ -142,8 +140,7 @@
 
 [#49878]: https://github.com/dart-lang/sdk/issues/49878
 
-- Adds three new `FileSystemException` subclasses to handle common error
-  cases:
+- Adds three new `FileSystemException` subclasses to handle common error cases:
 
   - `PathAccessException`: The necessary access rights are not available.
   - `PathExistsException`: The path being created already exists.
@@ -158,9 +155,9 @@
 
 #### `dart:mirrors`
 
-- **Breaking change** [#34233][]: The APIs [`MirrorsUsed`][] and [`Comment`][]
-  have been removed. `MirrorsUsed` was experimental and deprecated; `Comment`
-  was previously used internally in dart2js. Both are no longer functional.
+- **Breaking change** [#34233]: The APIs [`MirrorsUsed`] and [`Comment`] have
+  been removed. `MirrorsUsed` was experimental and deprecated; `Comment` was
+  previously used internally in dart2js. Both are no longer functional.
 
 [#34233]: https://github.com/dart-lang/sdk/issues/34233
 [`MirrorsUsed`]: https://api.dart.dev/stable/dart-mirrors/MirrorsUsed-class.html
@@ -172,18 +169,18 @@
 
 - **Breaking changes to the preview feature `@staticInterop`**:
   - Classes with this annotation are now disallowed from using `external`
-  generative constructors. Use `external factory`s for these classes instead,
-  and the behavior should be identical. This includes use of synthetic
-  constructors. See [#48730][] and [#49941][] for more details.
+    generative constructors. Use `external factory`s for these classes instead,
+    and the behavior should be identical. This includes use of synthetic
+    constructors. See [#48730] and [#49941] for more details.
   - Classes with this annotation's external extension members are now disallowed
-  from using type parameters e.g. `external void method<T>(T t)`. Use a
-  non-`external` extension method for type parameters instead. See [#49350][]
-  for more details.
+    from using type parameters e.g. `external void method<T>(T t)`. Use a
+    non-`external` extension method for type parameters instead. See [#49350]
+    for more details.
   - Classes with this annotation should also have the `@JS` annotation. You can
-  also have the `@anonymous` annotation with these two annotations for an object
-  literal constructor, but it isn't required.
+    also have the `@anonymous` annotation with these two annotations for an
+    object literal constructor, but it isn't required.
   - Classes with this annotation can not be implemented by classes without this
-  annotation. This is to avoid confusing type behavior.
+    annotation. This is to avoid confusing type behavior.
 
 [#48730]: https://github.com/dart-lang/sdk/issues/48730
 [#49941]: https://github.com/dart-lang/sdk/issues/49941
@@ -208,14 +205,19 @@
 
 Updated the Linter to `1.31.0`, which includes changes that
 
-- add new lint: `enable_null_safety`.
-- add new lint: `library_annotations`.
+- add new lint: `collection_methods_unrelated_type`.
+- add new lint: `combinators_ordering`.
 - add new lint: `dangling_library_doc_comments`.
+- add new lint: `enable_null_safety`.
+- add new lint: `implicit_call_tearoffs`.
+- add new lint: `library_annotations`.
+- add new lint: `unnecessary_library_directive`.
+- add new lint: `unreachable_from_main`.
+- add new lint: `use_string_in_part_of_directives`.
 - fix `no_leading_underscores_for_local_identifiers` to not report super formals
   as local variables.
 - fix `unnecessary_overrides` false negatives.
 - fix `cancel_subscriptions` for nullable fields.
-- add new lint: `collection_methods_unrelated_type`.
 - update `library_names` to support unnamed libraries.
 - fix `unnecessary_parenthesis` support for as-expressions.
 - fix `use_build_context_synchronously` to check for context property accesses.
@@ -227,36 +229,9 @@
 - fix `use_build_context_synchronously` to check for `BuildContext`s in named
   expressions.
 - fix `exhaustive_cases` to check parenthesized expressions
-- improves performance for:
-  - `avoid_null_checks_in_equality_operators`.
-  - `join_return_with_statement`.
-  - `recursive_getters`.
-  - `unnecessary_lambdas`.
-  - `diagnostic_describe_all_properties`.
-  - `prefer_foreach`.
-  - `avoid_escaping_inner_quotes`.
-  - `cascade_invocations`.
-  - `tighten_type_of_initializing_formals`.
-  - `prefer_interpolation_to_compose_strings`.
-  - `prefer_constructors_over_static_methods`.
-  - `avoid_returning_null`.
-  - `parameter_assignments`.
-  - `prefer_constructors_over_static_methods`.
-  - `prefer_interpolation_to_compose_strings`.
-  - `avoid_returning_null`.
-  - `avoid_returning_this`.
-  - `flutter_style_todos`.
-  - `avoid_positional_boolean_parameters`.
-  - `prefer_const_constructors`.
-- add new lint: `implicit_call_tearoffs`.
-- add new lint: `unnecessary_library_directive`.
 - update `avoid_redundant_argument_values` to work with enum declarations.
-- improve performance for `prefer_contains`.
-- add new lint: `unreachable_from_main`.
 - fix `avoid_redundant_argument_values` when referencing required
   parameters in legacy libraries.
-- improve performance for `use_late_for_private_fields_and_variables`.
-- add new lint: `use_string_in_part_of_directives`.
 - fix `use_super_parameters` false positives with repeated super
   parameter references.
 - update `use_late_for_private_fields_and_variables` to handle enums.
@@ -265,8 +240,6 @@
   in string interpolations.
 - update `public_member_api_docs` to report diagnostics on extension
   names (instead of bodies).
-- add miscellaneous documentation improvements.
-- add new lint: `combinators_ordering`.
 - fix `use_colored_box` and `use_decorated_box` to not over-report on containers without
   a child.
 - fix `unnecessary_parenthesis` false positives on a map-or-set literal at the start of
@@ -277,6 +250,29 @@
 - fix `prefer_final_locals` false positives on declaration lists with at least one
   non-final variable.
 - fix`use_build_context_synchronously` to handle `await`s in `if` conditions.
+- improves performance for:
+  - `avoid_escaping_inner_quotes`.
+  - `avoid_null_checks_in_equality_operators`.
+  - `avoid_positional_boolean_parameters`.
+  - `avoid_returning_null`.
+  - `avoid_returning_null`.
+  - `avoid_returning_this`.
+  - `cascade_invocations`.
+  - `diagnostic_describe_all_properties`.
+  - `flutter_style_todos`.
+  - `join_return_with_statement`.
+  - `parameter_assignments`.
+  - `prefer_const_constructors`.
+  - `prefer_constructors_over_static_methods`.
+  - `prefer_constructors_over_static_methods`.
+  - `prefer_contains`.
+  - `prefer_foreach`.
+  - `prefer_interpolation_to_compose_strings`.
+  - `prefer_interpolation_to_compose_strings`.
+  - `recursive_getters`.
+  - `tighten_type_of_initializing_formals`.
+  - `unnecessary_lambdas`.
+  - `use_late_for_private_fields_and_variables`.
 
 #### Pub
 
@@ -305,10 +301,11 @@
 - Update `dart pub publish` to require a working resolution.
   If publishing a breaking release of mutually dependent packages use `dependency_overrides`
   to obtain a resolution.
-- `dart pub add` will now allow adding multiple packages from any source using the same YAML syntax as in `pubspec.yaml`.
+- `dart pub add` will now allow adding multiple packages from any source using 
+  the same YAML syntax as in `pubspec.yaml`.
 
   For example:
-  ```
+  ```console
   $ dart pub add retry:^1.0.0 'dev:foo{"git":"https://github.com/foo/foo"}'
   ```
 - `dart pub publish` will now give a warning if `dart analyze` reports any diagnostics.
@@ -605,17 +602,16 @@
 Updated the Linter to `1.25.0`, which includes changes that
 
 - add new lint: `discarded_futures`.
+- add new lint: `unnecessary_null_aware_operator_on_extension_on_nullable`.
+- add new lint: `unnecessary_to_list_in_spreads`.
 - improve message and highlight range for `no_duplicate_case_values`
 - improve performance for `lines_longer_than_80_chars`,
   `prefer_const_constructors_in_immutables`, and
   `prefer_initializing_formals`.
 - fix `prefer_final_parameters` to support super parameters.
-- add new lint: `unnecessary_to_list_in_spreads`.
 - fix `unawaited_futures` to handle string interpolated
   futures.
 - update `use_colored_box` to not flag nullable colors,
-- add new lint:
-  `unnecessary_null_aware_operator_on_extension_on_nullable`.
 - fix `no_leading_underscores_for_local_identifiers`
   to lint local function declarations.
 - fix `avoid_init_to_null` to correctly handle super
diff --git a/benchmarks/IsolateRegExp/dart/IsolateRegExp.dart b/benchmarks/IsolateRegExp/dart/IsolateRegExp.dart
new file mode 100644
index 0000000..6430809
--- /dev/null
+++ b/benchmarks/IsolateRegExp/dart/IsolateRegExp.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// Measures performance of RegExp reuse between isolates.
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:benchmark_harness/benchmark_harness.dart';
+
+class SendReceiveRegExp extends AsyncBenchmarkBase {
+  SendReceiveRegExp(String name, this.re) : super(name);
+
+  @override
+  Future<void> run() async {
+    await helper.run(re);
+  }
+
+  @override
+  Future<void> setup() async {
+    helper = SendReceiveHelper();
+    await helper.setup();
+  }
+
+  @override
+  Future<void> teardown() async {
+    await helper.finalize();
+  }
+
+  late SendReceiveHelper helper;
+  RegExp re;
+}
+
+class SendReceiveHelper {
+  SendReceiveHelper();
+
+  Future<void> setup() async {
+    final port = ReceivePort();
+    inbox = StreamIterator<dynamic>(port);
+    workerExitedPort = ReceivePort();
+    await Isolate.spawn(isolate, port.sendPort,
+        onExit: workerExitedPort.sendPort);
+    await inbox.moveNext();
+    outbox = inbox.current;
+  }
+
+  Future<void> finalize() async {
+    outbox.send(null);
+    await workerExitedPort.first;
+    workerExitedPort.close();
+    inbox.cancel();
+  }
+
+  // Send regexp to worker, get one back, repeat few times.
+  Future<void> run(RegExp re) async {
+    for (int i = 0; i < 5; i++) {
+      outbox.send(re);
+      await inbox.moveNext();
+      re = inbox.current;
+    }
+  }
+
+  late StreamIterator<dynamic> inbox;
+  late SendPort outbox;
+  late ReceivePort workerExitedPort;
+}
+
+Future<void> isolate(SendPort sendPort) async {
+  final port = ReceivePort();
+  final inbox = StreamIterator<dynamic>(port);
+
+  sendPort.send(port.sendPort);
+  while (true) {
+    await inbox.moveNext();
+    final received = inbox.current;
+    if (received == null) {
+      break;
+    }
+    // use RegExp to ensure it is compiled
+    RegExp re = received as RegExp;
+    re.firstMatch('h' * 1000);
+    // send the RegExp
+    sendPort.send(re);
+  }
+  port.close();
+}
+
+Future<void> main() async {
+  await SendReceiveRegExp('IsolateRegExp.MatchFast', RegExp('h?h')).report();
+  await SendReceiveRegExp('IsolateRegExp.MatchSlow',
+          RegExp(r'(?<=\W|\b|^)(a.? b c.?) ?(\(.*\))?$'))
+      .report();
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index feb40b6..94e7e60 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -10706,8 +10706,8 @@
 const Code<Message Function(String name)>
     codeSealedClassSubtypeOutsideOfLibrary =
     const Code<Message Function(String name)>(
-  "SealedClassSubtypeOutsideOfLibrary",
-);
+        "SealedClassSubtypeOutsideOfLibrary",
+        analyzerCodes: <String>["SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY"]);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSealedClassSubtypeOutsideOfLibrary(String name) {
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 2b68e91..6dcc89c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -1778,8 +1778,10 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
-    listener?.handleVariablePattern(keyword, variable);
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
+    listener?.handleVariablePattern(keyword, variable,
+        inAssignmentPattern: inAssignmentPattern);
   }
 
   @override
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 28c02b5..9fe0915 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -1433,7 +1433,12 @@
   /// Called after the parser has consumed a variable pattern, consisting of an
   /// optional `var` or `final` keyword, an optional type annotation, and a
   /// variable name identifier.
-  void handleVariablePattern(Token? keyword, Token variable) {
+  ///
+  /// The flag [inAssignmentPattern] indicates whether this variable pattern is
+  /// part of a `patternAssignment` (and hence should refer to a previously
+  /// declared variable rather than declaring a fresh one).
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
     logEvent('VariablePattern');
   }
 
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 4d8415a..788f2f7 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -6298,7 +6298,7 @@
     Token next = token.next!;
     if (allowPatterns && optional('case', next)) {
       Token case_ = token = next;
-      token = parsePattern(token, isRefutableContext: true);
+      token = parsePattern(token, PatternContext.matching);
       next = token.next!;
       Token? when;
       if (optional('when', next)) {
@@ -7459,7 +7459,7 @@
         }
         if (forPartsContext != null) {
           forPartsContext.patternKeyword = varFinalOrConst;
-          return parsePattern(beforeType, isRefutableContext: false);
+          return parsePattern(beforeType, PatternContext.declaration);
         } else {
           return parsePatternVariableDeclarationStatement(
               beforeType, start, varFinalOrConst);
@@ -8371,7 +8371,7 @@
           }
           listener.beginCaseExpression(caseKeyword);
           if (allowPatterns) {
-            token = parsePattern(caseKeyword, isRefutableContext: true);
+            token = parsePattern(caseKeyword, PatternContext.matching);
           } else {
             token = parseExpression(caseKeyword);
           }
@@ -9234,20 +9234,13 @@
   /// nullAssertPattern ::= primaryPattern '!'
   /// nullCheckPattern ::= primaryPattern '?'
   ///
-  /// [isRefutableContext] should be `true` if the pattern occurs in a
-  /// `guardedPattern` or any of its sub-patterns (i.e. in a
-  /// `switchStatementCase`, `switchExpressionCase`, or `ifCondition`); these
-  /// are contexts where a pattern match might be expected to fail, and bare
-  /// identifiers are treated as constant patterns.  It should be `false` if the
-  /// pattern occurs in a `localVariableDeclaration`, `forLoopParts`, or
-  /// `patternAssignment`; these are contexts where a pattern match failure is
-  /// either prohibited statically or causes a runtime exception, and bare
-  /// identifiers are treated as variable patterns.
-  Token parsePattern(Token token,
-      {int precedence = 1, required bool isRefutableContext}) {
+  /// [patternContext] indicates whether the pattern is refutable or
+  /// irrefutable, and whether it occurs as part of a patternAssignment.
+  Token parsePattern(Token token, PatternContext patternContext,
+      {int precedence = 1}) {
     assert(precedence >= 1);
     assert(precedence <= SELECTOR_PRECEDENCE);
-    token = parsePrimaryPattern(token, isRefutableContext: isRefutableContext);
+    token = parsePrimaryPattern(token, patternContext);
     while (true) {
       Token next = token.next!;
       int tokenLevel = _computePrecedence(next, forPattern: true);
@@ -9278,9 +9271,8 @@
         case '||':
           listener.beginBinaryPattern(next);
           // Left associative so we parse the RHS one precedence level higher
-          token = parsePattern(next,
-              precedence: tokenLevel + 1,
-              isRefutableContext: isRefutableContext);
+          token =
+              parsePattern(next, patternContext, precedence: tokenLevel + 1);
           listener.endBinaryPattern(next);
           break;
         default:
@@ -9317,7 +9309,7 @@
   ///                   | 'const' typeArguments? '{' elements? '}'
   ///                   | 'const' '(' expression ')'
   /// objectPattern ::= typeName typeArguments? '(' patternFields? ')'
-  Token parsePrimaryPattern(Token token, {required bool isRefutableContext}) {
+  Token parsePrimaryPattern(Token token, PatternContext patternContext) {
     Token start = token;
     TypeParamOrArgInfo typeArg =
         computeTypeParamOrArg(token, /* inDeclaration = */ true);
@@ -9327,8 +9319,7 @@
       case '[':
         // listPattern ::= typeArguments? '[' patterns? ']'
         token = typeArg.parseArguments(token, this);
-        token = parseListPatternSuffix(token,
-            isRefutableContext: isRefutableContext);
+        token = parseListPatternSuffix(token, patternContext);
         // A list pattern is a valid form of outerPattern, so verify that
         // skipOuterPattern would have skipped this pattern properly.
         assert(
@@ -9339,8 +9330,7 @@
         // mapPatternEntries ::= mapPatternEntry ( ',' mapPatternEntry )* ','?
         // mapPatternEntry   ::= expression ':' pattern
         token = typeArg.parseArguments(token, this);
-        token = parseMapPatternSuffix(token,
-            isRefutableContext: isRefutableContext);
+        token = parseMapPatternSuffix(token, patternContext);
         // A map pattern is a valid form of outerPattern, so verify that
         // skipOuterPattern would have skipped this pattern properly.
         assert(
@@ -9355,7 +9345,7 @@
       case 'var':
       case 'final':
         // variablePattern ::= ( 'var' | 'final' | 'final'? type )? identifier
-        return parseVariablePattern(token);
+        return parseVariablePattern(token, patternContext);
       case '(':
         // parenthesizedPattern  ::= '(' pattern ')'
         // recordPattern         ::= '(' patternFields? ')'
@@ -9366,8 +9356,8 @@
           listener.handleRecordPattern(next, /* count = */ 0);
           token = nextNext;
         } else {
-          token = parseParenthesizedPatternOrRecordPattern(token,
-              isRefutableContext: isRefutableContext);
+          token =
+              parseParenthesizedPatternOrRecordPattern(token, patternContext);
         }
         // A record or parenthesized pattern is a valid form of outerPattern, so
         // verify that skipOuterPattern would have skipped this pattern
@@ -9412,7 +9402,7 @@
     }
     TypeInfo typeInfo = computeVariablePatternType(token);
     if (typeInfo != noType) {
-      return parseVariablePattern(token, typeInfo: typeInfo);
+      return parseVariablePattern(token, patternContext, typeInfo: typeInfo);
     }
     // objectPattern ::= typeName typeArguments? '(' patternFields? ')'
     // TODO(paulberry): Make sure OTHER_IDENTIFIER is handled
@@ -9441,8 +9431,7 @@
       if (optional('(', afterToken) && !potentialTypeArg.recovered) {
         TypeParamOrArgInfo typeArg = potentialTypeArg;
         token = typeArg.parseArguments(token, this);
-        token = parseObjectPatternRest(token,
-            isRefutableContext: isRefutableContext);
+        token = parseObjectPatternRest(token, patternContext);
         listener.handleObjectPattern(firstIdentifier, dot, secondIdentifier);
         // An object pattern is a valid form of outerPattern, so verify that
         // skipOuterPattern would have skipped this pattern properly.
@@ -9452,10 +9441,10 @@
       } else if (dot == null) {
         // It's a single identifier.  If it's a wildcard pattern or we're in an
         // irrefutable context, parse it as a variable pattern.
-        if (!isRefutableContext || firstIdentifier.lexeme == '_') {
+        if (!patternContext.isRefutable || firstIdentifier.lexeme == '_') {
           // It's a wildcard pattern with no preceding type, so parse it as a
           // variable pattern.
-          return parseVariablePattern(beforeFirstIdentifier,
+          return parseVariablePattern(beforeFirstIdentifier, patternContext,
               typeInfo: typeInfo);
         }
       }
@@ -9474,7 +9463,8 @@
   /// about the type appearing after [token], if any.
   ///
   /// variablePattern ::= ( 'var' | 'final' | 'final'? type )? identifier
-  Token parseVariablePattern(Token token, {TypeInfo typeInfo = noType}) {
+  Token parseVariablePattern(Token token, PatternContext patternContext,
+      {TypeInfo typeInfo = noType}) {
     Token? keyword;
     if (typeInfo != noType) {
       token = typeInfo.parseType(token, this);
@@ -9500,7 +9490,8 @@
       token = insertSyntheticIdentifier(
           token, IdentifierContext.localVariableDeclaration);
     }
-    listener.handleVariablePattern(keyword, token);
+    listener.handleVariablePattern(keyword, token,
+        inAssignmentPattern: patternContext == PatternContext.assignment);
     return token;
   }
 
@@ -9508,8 +9499,7 @@
   /// bracket.
   ///
   /// listPattern ::= typeArguments? '[' patterns? ']'
-  Token parseListPatternSuffix(Token token,
-      {required bool isRefutableContext}) {
+  Token parseListPatternSuffix(Token token, PatternContext patternContext) {
     Token beforeToken = token;
     Token beginToken = token = token.next!;
     assert(optional('[', token) || optional('[]', token));
@@ -9537,11 +9527,11 @@
         next = token.next!;
         bool hasSubPattern = looksLikePatternStart(next);
         if (hasSubPattern) {
-          token = parsePattern(token, isRefutableContext: isRefutableContext);
+          token = parsePattern(token, patternContext);
         }
         listener.handleRestPattern(dots, hasSubPattern: hasSubPattern);
       } else {
-        token = parsePattern(token, isRefutableContext: isRefutableContext);
+        token = parsePattern(token, patternContext);
       }
       next = token.next!;
       ++count;
@@ -9585,7 +9575,7 @@
   /// mapPattern        ::= typeArguments? '{' mapPatternEntries? '}'
   /// mapPatternEntries ::= mapPatternEntry ( ',' mapPatternEntry )* ','?
   /// mapPatternEntry   ::= expression ':' pattern
-  Token parseMapPatternSuffix(Token token, {required bool isRefutableContext}) {
+  Token parseMapPatternSuffix(Token token, PatternContext patternContext) {
     Token leftBrace = token = token.next!;
     assert(optional('{', leftBrace));
     Token next = token.next!;
@@ -9604,7 +9594,7 @@
         next = token.next!;
         bool hasSubPattern = looksLikePatternStart(next);
         if (hasSubPattern) {
-          token = parsePattern(token, isRefutableContext: isRefutableContext);
+          token = parsePattern(token, patternContext);
         }
         listener.handleRestPattern(dots, hasSubPattern: hasSubPattern);
       } else {
@@ -9618,7 +9608,7 @@
               codes.templateExpectedButGot.withArguments(':'),
               new SyntheticToken(TokenType.PERIOD, next.charOffset));
         }
-        token = parsePattern(colon, isRefutableContext: isRefutableContext);
+        token = parsePattern(colon, patternContext);
         listener.handleMapPatternEntry(colon, token.next!);
       }
       ++count;
@@ -9664,8 +9654,8 @@
   /// recordPattern         ::= '(' patternFields? ')'
   /// patternFields         ::= patternField ( ',' patternField )* ','?
   /// patternField          ::= ( identifier? ':' )? pattern
-  Token parseParenthesizedPatternOrRecordPattern(Token token,
-      {required bool isRefutableContext}) {
+  Token parseParenthesizedPatternOrRecordPattern(
+      Token token, PatternContext patternContext) {
     Token begin = token.next!;
     assert(optional('(', begin));
     bool old = mayParseFunctionExpressions;
@@ -9698,7 +9688,7 @@
         colon = token;
         wasValidRecord = true;
       }
-      token = parsePattern(token, isRefutableContext: isRefutableContext);
+      token = parsePattern(token, patternContext);
       next = token.next!;
       if (wasRecord || colon != null) {
         listener.handlePatternField(colon);
@@ -9741,8 +9731,7 @@
   /// `(`.
   ///
   /// objectPattern ::= typeName typeArguments? '(' patternFields? ')'
-  Token parseObjectPatternRest(Token token,
-      {required bool isRefutableContext}) {
+  Token parseObjectPatternRest(Token token, PatternContext patternContext) {
     Token begin = token = token.next!;
     assert(optional('(', begin));
     int argumentCount = 0;
@@ -9764,7 +9753,7 @@
                 .next!;
         colon = token;
       }
-      token = parsePattern(token, isRefutableContext: isRefutableContext);
+      token = parsePattern(token, patternContext);
       next = token.next!;
       listener.handlePatternField(colon);
       ++argumentCount;
@@ -9869,7 +9858,7 @@
   ///                                expression
   Token parsePatternVariableDeclarationStatement(
       Token keyword, Token start, Token varOrFinal) {
-    Token token = parsePattern(keyword, isRefutableContext: false);
+    Token token = parsePattern(keyword, PatternContext.declaration);
     Token equals = token.next!;
     // Caller should have assured that the pattern was followed by an `=`.
     assert(optional('=', equals));
@@ -9882,7 +9871,7 @@
 
   /// patternAssignment ::= outerPattern '=' expression
   Token parsePatternAssignment(Token token) {
-    token = parsePattern(token, isRefutableContext: false);
+    token = parsePattern(token, PatternContext.assignment);
     Token equals = token.next!;
     // Caller should have assured that the pattern was followed by an `=`.
     assert(optional('=', equals));
@@ -9911,7 +9900,7 @@
       mayParseFunctionExpressions = false;
       while (true) {
         listener.beginSwitchExpressionCase();
-        token = parsePattern(token, isRefutableContext: true);
+        token = parsePattern(token, PatternContext.matching);
         Token? when;
         next = token.next!;
         if (optional('when', next)) {
@@ -9980,3 +9969,23 @@
   @override
   String toString() => 'ForPartsContext($patternKeyword)';
 }
+
+/// Enum describing the different contexts in which a pattern can occur.
+enum PatternContext {
+  /// The pattern is part of a localVariableDeclaration or forLoopParts, meaning
+  /// bare identifiers refer to freshly declared variables.
+  declaration(isRefutable: false),
+
+  /// The pattern is part of a guardedPattern inside an if-case, switch
+  /// expression, or switch statement, meaning bare identifiers refer to
+  /// constants.
+  matching(isRefutable: true),
+
+  /// The pattern is part of a pattern assignment, meaning bare identifiers
+  /// refer to previously declared variables.
+  assignment(isRefutable: false);
+
+  final bool isRefutable;
+
+  const PatternContext({required this.isRefutable});
+}
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 6ba2d85..f7ce9ff 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 50.0.0
+version: 51.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/_fe_analyzer_shared
 
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
index 63f25b9..cdaf55f 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
@@ -1869,7 +1869,7 @@
       var x = Var('x');
       var y = Var('y');
       var z = Var('z');
-      var w = Var('w', errorId: 'w');
+      var w = Var('w');
       h.run([
         declare(x, type: 'int'),
         declare(y, type: 'int'),
@@ -1877,11 +1877,11 @@
         ifCase(
           expr('num'),
           w.pattern(type: 'int'),
-          ifTrue: [
+          [
             x.write(expr('int')).stmt,
             y.write(expr('int')).stmt,
           ],
-          ifFalse: [
+          [
             y.write(expr('int')).stmt,
             z.write(expr('int')).stmt,
           ],
@@ -1899,7 +1899,7 @@
         ifCase(
           x.expr.notEq(nullLiteral),
           intLiteral(0).pattern,
-          ifTrue: [
+          [
             checkNotPromoted(x),
           ],
         ),
@@ -2016,7 +2016,7 @@
     });
 
     test('switchStatement var promotes', () {
-      var x = Var('x')..errorId = 'x';
+      var x = Var('x');
       h.run([
         switch_(
             expr('int'),
@@ -2030,7 +2030,7 @@
     });
 
     test('switchStatement_afterWhen() promotes', () {
-      var x = Var('x')..errorId = 'x';
+      var x = Var('x');
       h.run([
         switch_(
             expr('num'),
@@ -2250,8 +2250,8 @@
     });
 
     test('switchStatement_endAlternative() joins branches', () {
-      var x1 = Var('x')..errorId = 'x1';
-      var x2 = Var('x')..errorId = 'x2';
+      var x1 = Var('x', identity: 'x1');
+      var x2 = Var('x', identity: 'x2');
       var y = Var('y');
       var z = Var('z');
       h.run([
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index 8190953..713de17 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -202,19 +202,16 @@
       location: location);
 }
 
-Statement ifCase(
-  Expression expression,
-  PossiblyGuardedPattern pattern, {
-  List<Statement>? ifTrue,
-  List<Statement>? ifFalse,
-}) {
+Statement ifCase(Expression expression, PossiblyGuardedPattern pattern,
+    List<Statement> ifTrue,
+    [List<Statement>? ifFalse]) {
   var location = computeLocation();
   var guardedPattern = pattern._asGuardedPattern;
   return _IfCase(
     expression,
     guardedPattern.pattern,
     guardedPattern.guard,
-    _Block(ifTrue ?? [], location: location),
+    _Block(ifTrue, location: location),
     ifFalse != null ? _Block(ifFalse, location: location) : null,
     location: location,
   );
@@ -223,9 +220,9 @@
 CollectionElement ifCaseElement(
   Expression expression,
   PossiblyGuardedPattern pattern,
-  CollectionElement ifTrue, {
+  CollectionElement ifTrue, [
   CollectionElement? ifFalse,
-}) {
+]) {
   var location = computeLocation();
   var guardedPattern = pattern._asGuardedPattern;
   return new _IfCaseElement(
@@ -690,6 +687,12 @@
       fail('assertInErrorRecovery called but no errors reported: '
           '$assertInErrorRecoveryStack');
     }
+    if (Node._nodesWithUnusedErrorIds.isNotEmpty) {
+      var ids = [for (var node in Node._nodesWithUnusedErrorIds) node._errorId]
+          .join(', ');
+      Node._nodesWithUnusedErrorIds.clear();
+      fail('Unused error ids: $ids');
+    }
   }
 
   Type _getIteratedType(Type iterableType) {
@@ -1180,6 +1183,11 @@
 class Node {
   static int _nextId = 0;
 
+  /// Tracks all [Node] object that have had an [errorId] assigned, but haven't
+  /// had [errorId] queried.  This is used to detect unused error IDs so that we
+  /// can keep the test cases clean.
+  static final Set<Node> _nodesWithUnusedErrorIds = {};
+
   final int id;
 
   final String location;
@@ -1189,6 +1197,7 @@
   Node._({required this.location}) : id = _nextId++;
 
   String get errorId {
+    _nodesWithUnusedErrorIds.remove(this);
     String? errorId = _errorId;
     if (errorId == null) {
       fail('No error ID assigned for $runtimeType $this at $location');
@@ -1199,6 +1208,7 @@
 
   set errorId(String value) {
     _errorId = value;
+    _nodesWithUnusedErrorIds.add(this);
   }
 
   @override
@@ -1290,7 +1300,8 @@
       ],
       name,
     ].join(' ');
-    var componentsStr = components.map((v) => v._errorId ?? v).join(', ');
+    var componentsStr =
+        components.map((v) => v.stringToCheckVariables).join(', ');
     return '$declarationStr = [$componentsStr]';
   }
 }
@@ -1430,12 +1441,13 @@
   /// The type of the variable, or `null` if it is not yet known.
   Type? _type;
 
-  Var(this.name, {this.isFinal = false, String? errorId})
-      : super._(location: computeLocation()) {
-    if (errorId != null) {
-      this.errorId = errorId;
-    }
-  }
+  /// Identifier for this variable in IR.  This allows distinct variables with
+  /// the same name to be distinguished.
+  final String identity;
+
+  Var(this.name, {this.isFinal = false, String? identity})
+      : identity = identity ?? name,
+        super._(location: computeLocation());
 
   /// Creates an L-value representing a reference to this variable.
   LValue get expr =>
@@ -1444,7 +1456,7 @@
   bool get isConsistent => true;
 
   /// The string that should be used to check variables in a set.
-  String get stringToCheckVariables => errorId;
+  String get stringToCheckVariables => identity;
 
   /// Gets the type if known; otherwise throws an exception.
   Type get type {
diff --git a/pkg/_fe_analyzer_shared/test/type_inference/type_inference_test.dart b/pkg/_fe_analyzer_shared/test/type_inference/type_inference_test.dart
index 567c245..04e3efb 100644
--- a/pkg/_fe_analyzer_shared/test/type_inference/type_inference_test.dart
+++ b/pkg/_fe_analyzer_shared/test/type_inference/type_inference_test.dart
@@ -78,7 +78,7 @@
             expr('Object'),
             intLiteral(0).pattern,
             intLiteral(1).checkContext('int').asCollectionElement,
-            ifFalse: intLiteral(2).checkContext('int').asCollectionElement,
+            intLiteral(2).checkContext('int').asCollectionElement,
           )
               .checkIr('if(expression: expr(Object), pattern: '
                   'const(0, matchedType: Object), guard: true, '
@@ -342,11 +342,12 @@
 
     group('If-case:', () {
       test('Type schema', () {
-        var x = Var('x')..errorId = 'x';
+        var x = Var('x');
         h.run([
           ifCase(
             expr('int').checkContext('?'),
             x.pattern(type: 'num'),
+            [],
           ).checkIr('ifCase(expr(int), '
               'varPattern(x, matchedType: int, staticType: num), variables(x), '
               'true, block(), noop)'),
@@ -354,15 +355,15 @@
       });
 
       test('With else', () {
-        var x = Var('x')..errorId = 'x';
+        var x = Var('x');
         h.run([
           ifCase(
             expr('num'),
             x.pattern(type: 'int'),
-            ifTrue: [
+            [
               expr('Object').stmt,
             ],
-            ifFalse: [
+            [
               expr('String').stmt,
             ],
           ).checkIr('ifCase(expr(num), '
@@ -372,11 +373,12 @@
       });
 
       test('With guard', () {
-        var x = Var('x')..errorId = 'x';
+        var x = Var('x');
         h.run([
           ifCase(
             expr('num'),
             x.pattern(type: 'int').when(x.expr.eq(intLiteral(0))),
+            [],
           ).checkIr('ifCase(expr(num), '
               'varPattern(x, matchedType: num, staticType: int), variables(x), '
               '==(x, 0), block(), noop)'),
@@ -384,11 +386,12 @@
       });
 
       test('Allows refutable patterns', () {
-        var x = Var('x')..errorId = 'x';
+        var x = Var('x');
         h.run([
           ifCase(
             expr('num').checkContext('?'),
             x.pattern(type: 'int'),
+            [],
           ).checkIr('ifCase(expr(num), '
               'varPattern(x, matchedType: num, staticType: int), variables(x), '
               'true, block(), noop)'),
@@ -397,11 +400,12 @@
 
       group('Guard not assignable to bool', () {
         test('int', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             ifCase(
               expr('int'),
               x.pattern().when(expr('int')..errorId = 'GUARD'),
+              [],
             ),
           ], expectedErrors: {
             'nonBooleanCondition(GUARD)'
@@ -409,21 +413,23 @@
         });
 
         test('bool', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             ifCase(
               expr('int'),
               x.pattern().when(expr('bool')),
+              [],
             ),
           ], expectedErrors: {});
         });
 
         test('dynamic', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             ifCase(
               expr('int'),
               x.pattern().when(expr('dynamic')),
+              [],
             ),
           ], expectedErrors: {});
         });
@@ -553,7 +559,7 @@
 
       group('var pattern:', () {
         test('untyped', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             switch_(
               expr('int').checkContext('?'),
@@ -571,7 +577,7 @@
         });
 
         test('typed', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             switch_(
               expr('int').checkContext('?'),
@@ -622,7 +628,7 @@
       });
 
       test('guard', () {
-        var i = Var('i')..errorId = 'i';
+        var i = Var('i');
         h.run([
           switch_(
             expr('int'),
@@ -646,8 +652,8 @@
 
       group('Variables:', () {
         test('Independent cases', () {
-          var x = Var('x')..errorId = 'x';
-          var y = Var('y')..errorId = 'y';
+          var x = Var('x');
+          var y = Var('y');
           h.run([
             switch_(
               expr('int'),
@@ -670,8 +676,8 @@
         group('Shared case scope:', () {
           group('Present in both cases:', () {
             test('With the same type and finality', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 switch_(
                   expr('int'),
@@ -691,9 +697,9 @@
               ]);
             });
             test('With the same type and finality, with logical-or', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
-              var x3 = Var('x')..errorId = 'x3';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
+              var x3 = Var('x', identity: 'x3');
               h.run([
                 switch_(
                   expr('int'),
@@ -716,8 +722,8 @@
             });
             group('With different type:', () {
               test('explicit / explicit', () {
-                var x1 = Var('x')..errorId = 'x1';
-                var x2 = Var('x')..errorId = 'x2';
+                var x1 = Var('x', identity: 'x1');
+                var x2 = Var('x', identity: 'x2');
                 h.run([
                   switch_(
                     expr('int'),
@@ -738,8 +744,8 @@
                 ]);
               });
               test('explicit / implicit', () {
-                var x1 = Var('x')..errorId = 'x1';
-                var x2 = Var('x')..errorId = 'x2';
+                var x1 = Var('x', identity: 'x1');
+                var x2 = Var('x', identity: 'x2');
                 h.run([
                   switch_(
                     expr('int'),
@@ -760,8 +766,8 @@
                 ]);
               });
               test('implicit / implicit', () {
-                var x1 = Var('x')..errorId = 'x1';
-                var x2 = Var('x')..errorId = 'x2';
+                var x1 = Var('x', identity: 'x1');
+                var x2 = Var('x', identity: 'x2');
                 h.run([
                   switch_(
                     expr('List<int>'),
@@ -786,8 +792,8 @@
               });
             });
             test('With different finality', () {
-              var x1 = Var('x', isFinal: true)..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', isFinal: true, identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 switch_(
                   expr('int'),
@@ -809,7 +815,7 @@
             });
           });
           test('case has, case not', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1');
             h.run([
               switch_(
                 expr('int'),
@@ -829,7 +835,7 @@
             ]);
           });
           test('case not, case has', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1');
             h.run([
               switch_(
                 expr('int'),
@@ -850,7 +856,7 @@
             ]);
           });
           test('case has, default', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1');
             h.run([
               switch_(
                 expr('int'),
@@ -869,7 +875,7 @@
             ]);
           });
           test('case has, with label', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1');
             h.run([
               switch_(
                 expr('int'),
@@ -1296,7 +1302,7 @@
 
       group('Guard not assignable to bool', () {
         test('int', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             switch_(
               expr('int'),
@@ -1313,7 +1319,7 @@
         });
 
         test('bool', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             switch_(
               expr('int'),
@@ -1328,7 +1334,7 @@
         });
 
         test('dynamic', () {
-          var x = Var('x')..errorId = 'x';
+          var x = Var('x');
           h.run([
             switch_(
               expr('int'),
@@ -1401,10 +1407,9 @@
 
       test('illegal late pattern', () {
         h.run([
-          (match(
+          match(
               listPattern([wildcard()])..errorId = 'PATTERN', expr('List<int>'),
-              isLate: true)
-            ..errorId = 'CONTEXT'),
+              isLate: true),
         ], expectedErrors: {
           'patternDoesNotAllowLate(PATTERN)'
         });
@@ -1424,11 +1429,12 @@
   group('Patterns:', () {
     group('Cast:', () {
       test('Type schema', () {
-        var x = Var('x')..errorId = 'x';
+        var x = Var('x');
         h.run([
           ifCase(
             expr('num'),
             x.pattern().as_('int'),
+            [],
           ).checkIr('ifCase(expr(num), castPattern(varPattern(x, '
               'matchedType: int, staticType: int), int, matchedType: num), '
               'variables(x), true, block(), noop)'),
@@ -1537,7 +1543,7 @@
 
       group('Static type', () {
         test('Explicit type arguments', () {
-          var x = Var('x', errorId: 'x');
+          var x = Var('x');
           h.run([
             ifCase(
               expr('dynamic'),
@@ -1551,6 +1557,7 @@
                   ),
                 ],
               ),
+              [],
             ).checkIr('ifCase(expr(dynamic), mapPattern(mapPatternEntry('
                 'expr(Object), varPattern(x, matchedType: int, staticType: '
                 'int)), matchedType: dynamic, requiredType: Map<bool, int>), '
@@ -1559,7 +1566,7 @@
         });
 
         test('Matched type is a map', () {
-          var x = Var('x', errorId: 'x');
+          var x = Var('x');
           h.run([
             ifCase(
               expr('Map<bool, int>'),
@@ -1569,6 +1576,7 @@
                   x.pattern(),
                 ),
               ]),
+              [],
             ).checkIr('ifCase(expr(Map<bool, int>), mapPattern(mapPatternEntry('
                 'expr(Object), varPattern(x, matchedType: int, staticType: '
                 'int)), matchedType: Map<bool, int>, requiredType: '
@@ -1577,7 +1585,7 @@
         });
 
         test('Matched type is dynamic', () {
-          var x = Var('x', errorId: 'x');
+          var x = Var('x');
           h.run([
             ifCase(
               expr('dynamic'),
@@ -1587,6 +1595,7 @@
                   x.pattern(),
                 ),
               ]),
+              [],
             ).checkIr('ifCase(expr(dynamic), mapPattern(mapPatternEntry('
                 'expr(Object), varPattern(x, matchedType: dynamic, staticType: '
                 'dynamic)), matchedType: dynamic, requiredType: '
@@ -1595,7 +1604,7 @@
         });
 
         test('Matched type is other', () {
-          var x = Var('x', errorId: 'x');
+          var x = Var('x');
           h.run([
             ifCase(
               expr('String'),
@@ -1605,6 +1614,7 @@
                   x.pattern(),
                 ),
               ]),
+              [],
             ).checkIr('ifCase(expr(String), mapPattern(mapPatternEntry('
                 'expr(Object), varPattern(x, matchedType: Object?, staticType: '
                 'Object?)), matchedType: String, requiredType: '
@@ -1816,8 +1826,8 @@
         });
 
         test('Matched type is other', () {
-          var x = Var('x')..errorId = 'x';
-          var y = Var('y')..errorId = 'y';
+          var x = Var('x');
+          var y = Var('y');
           h.run([
             ifCase(
               expr('Object'),
@@ -1826,6 +1836,7 @@
                 listPatternRestElement(
                     y.pattern(expectInferredType: 'List<Object?>')),
               ]),
+              [],
             ).checkIr('ifCase(expr(Object), listPattern(varPattern(x, '
                 'matchedType: Object?, staticType: Object?), ...(varPattern(y, '
                 'matchedType: List<Object?>, staticType: List<Object?>)), '
@@ -1836,7 +1847,7 @@
 
         group('Rest pattern:', () {
           test('With pattern', () {
-            var x = Var('x')..errorId = 'x';
+            var x = Var('x');
             h.run([
               match(
                 listPattern([listPatternRestElement(x.pattern())]),
@@ -1914,13 +1925,13 @@
       });
 
       test('Match var overlap', () {
-        var x1 = Var('x')..errorId = 'x1';
-        var x2 = Var('x')..errorId = 'x2';
+        var x1 = Var('x', identity: 'x1')..errorId = 'x1';
+        var x2 = Var('x', identity: 'x2')..errorId = 'x2';
         h.run([
           match(
             listPattern([
-              x1.pattern()..errorId = 'P1',
-              x2.pattern()..errorId = 'P2',
+              x1.pattern(),
+              x2.pattern(),
             ]),
             expr('List<int>'),
           ),
@@ -1959,13 +1970,10 @@
       });
 
       test('Duplicate variable pattern', () {
-        var x1 = Var('x')..errorId = 'x1';
-        var x2 = Var('x')..errorId = 'x2';
+        var x1 = Var('x', identity: 'x1')..errorId = 'x1';
+        var x2 = Var('x', identity: 'x2')..errorId = 'x2';
         h.run([
-          match(
-              (x1.pattern()..errorId = 'LHS')
-                  .and(x2.pattern()..errorId = 'RHS'),
-              expr('int')),
+          match(x1.pattern().and(x2.pattern()), expr('int')),
         ], expectedErrors: {
           'duplicateVariablePattern(name: x, original: x1, duplicate: x2)',
         });
@@ -2004,12 +2012,13 @@
         group('Should have same types:', () {
           group('Same:', () {
             test('explicit / explicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 ifCase(
                   expr('Object'),
                   x1.pattern(type: 'int').or(x2.pattern(type: 'int')),
+                  [],
                 ).checkIr('ifCase(expr(Object), logicalOrPattern(varPattern(x, '
                     'matchedType: Object, staticType: int), varPattern(x, '
                     'matchedType: Object, staticType: int), '
@@ -2018,14 +2027,15 @@
               ]);
             });
             test('explicit / explicit, normalized', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 ifCase(
                   expr('Object'),
                   x1
                       .pattern(type: 'Object')
                       .or(x2.pattern(type: 'FutureOr<Object>')),
+                  [],
                 ).checkIr('ifCase(expr(Object), logicalOrPattern(varPattern(x, '
                     'matchedType: Object, staticType: Object), varPattern(x, '
                     'matchedType: Object, staticType: FutureOr<Object>), '
@@ -2034,12 +2044,13 @@
               ]);
             });
             test('explicit / implicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 ifCase(
                   expr('int'),
                   x1.pattern(type: 'int').or(x2.pattern()),
+                  [],
                 ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                     'matchedType: int, staticType: int), varPattern(x, '
                     'matchedType: int, staticType: int), matchedType: int), '
@@ -2047,12 +2058,13 @@
               ]);
             });
             test('implicit / explicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 ifCase(
                   expr('int'),
                   x1.pattern().or(x2.pattern(type: 'int')),
+                  [],
                 ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                     'matchedType: int, staticType: int), varPattern(x, '
                     'matchedType: int, staticType: int), matchedType: int), '
@@ -2060,12 +2072,13 @@
               ]);
             });
             test('implicit / implicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2');
               h.run([
                 ifCase(
                   expr('int'),
                   x1.pattern().or(x2.pattern()),
+                  [],
                 ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                     'matchedType: int, staticType: int), varPattern(x, '
                     'matchedType: int, staticType: int), matchedType: int), '
@@ -2075,12 +2088,13 @@
           });
           group('Not same:', () {
             test('explicit / explicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2')..errorId = 'x2';
               h.run([
                 ifCase(
                   expr('Object'),
                   x1.pattern(type: 'int').or(x2.pattern(type: 'num')),
+                  [],
                 ).checkIr('ifCase(expr(Object), logicalOrPattern(varPattern(x, '
                     'matchedType: Object, staticType: int), varPattern(x, '
                     'matchedType: Object, staticType: num), matchedType: '
@@ -2092,12 +2106,13 @@
               });
             });
             test('explicit / implicit', () {
-              var x1 = Var('x')..errorId = 'x1';
-              var x2 = Var('x')..errorId = 'x2';
+              var x1 = Var('x', identity: 'x1');
+              var x2 = Var('x', identity: 'x2')..errorId = 'x2';
               h.run([
                 ifCase(
                   expr('num'),
                   x1.pattern(type: 'int').or(x2.pattern()),
+                  [],
                 ).checkIr('ifCase(expr(num), logicalOrPattern(varPattern(x, '
                     'matchedType: num, staticType: int), varPattern(x, '
                     'matchedType: num, staticType: num), matchedType: num), '
@@ -2111,12 +2126,13 @@
           });
         });
         test('Should have same finality', () {
-          var x1 = Var('x', isFinal: true)..errorId = 'x1';
-          var x2 = Var('x')..errorId = 'x2';
+          var x1 = Var('x', isFinal: true, identity: 'x1');
+          var x2 = Var('x', identity: 'x2')..errorId = 'x2';
           h.run([
             ifCase(
               expr('int'),
               x1.pattern().or(x2.pattern()),
+              [],
             ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                 'matchedType: int, staticType: int), varPattern(x, '
                 'matchedType: int, staticType: int), matchedType: int), '
@@ -2129,12 +2145,13 @@
         });
         group('Should be present in both branches:', () {
           test('Both have', () {
-            var x1 = Var('x')..errorId = 'x1';
-            var x2 = Var('x')..errorId = 'x2';
+            var x1 = Var('x', identity: 'x1');
+            var x2 = Var('x', identity: 'x2');
             h.run([
               ifCase(
                 expr('int'),
                 x1.pattern().or(x2.pattern()),
+                [],
               ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                   'matchedType: int, staticType: int), varPattern(x, '
                   'matchedType: int, staticType: int), matchedType: int), '
@@ -2142,11 +2159,12 @@
             ]);
           });
           test('Left has', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1')..errorId = 'x1';
             h.run([
               ifCase(
                 expr('int'),
                 (x1.pattern().or(wildcard()))..errorId = 'PATTERN',
+                [],
               ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(x, '
                   'matchedType: int, staticType: int), varPattern(_, '
                   'matchedType: int, staticType: int), matchedType: int), '
@@ -2158,11 +2176,12 @@
             });
           });
           test('Right has', () {
-            var x1 = Var('x')..errorId = 'x1';
+            var x1 = Var('x', identity: 'x1')..errorId = 'x1';
             h.run([
               ifCase(
                 expr('int'),
                 (wildcard().or(x1.pattern()))..errorId = 'PATTERN',
+                [],
               ).checkIr('ifCase(expr(int), logicalOrPattern(varPattern(_, '
                   'matchedType: int, staticType: int), varPattern(x, '
                   'matchedType: int, staticType: int), matchedType: int), '
@@ -2293,9 +2312,10 @@
               objectPattern(
                 requiredType: 'B',
                 fields: [
-                  Var('foo', errorId: 'foo').pattern().recordField('foo'),
+                  Var('foo').pattern().recordField('foo'),
                 ],
               ),
+              [],
             ).checkIr('ifCase(expr(A<int>), objectPattern(varPattern(foo, '
                 'matchedType: int, staticType: int), matchedType: A<int>, '
                 'requiredType: B<int>), variables(foo), true, block(), noop)'),
@@ -2309,9 +2329,10 @@
               objectPattern(
                 requiredType: 'dynamic',
                 fields: [
-                  Var('foo', errorId: 'foo').pattern().recordField('foo'),
+                  Var('foo').pattern().recordField('foo'),
                 ],
               ),
+              [],
             ).checkIr('ifCase(expr(int), objectPattern(varPattern(foo, '
                 'matchedType: dynamic, staticType: dynamic), matchedType: int, '
                 'requiredType: dynamic), variables(foo), true, block(), noop)'),
@@ -2325,9 +2346,10 @@
               objectPattern(
                 requiredType: 'Never',
                 fields: [
-                  Var('foo', errorId: 'foo').pattern().recordField('foo'),
+                  Var('foo').pattern().recordField('foo'),
                 ],
               ),
+              [],
             ).checkIr('ifCase(expr(int), objectPattern(varPattern(foo, '
                 'matchedType: Never, staticType: Never), matchedType: int, '
                 'requiredType: Never), variables(foo), true, block(), noop)'),
@@ -2342,12 +2364,11 @@
               objectPattern(
                 requiredType: 'A<int>',
                 fields: [
-                  Var('a', errorId: 'a').pattern().recordField('foo')
-                    ..errorId = 'ORIGINAL',
-                  Var('b', errorId: 'b').pattern().recordField('foo')
-                    ..errorId = 'DUPLICATE',
+                  Var('a').pattern().recordField('foo')..errorId = 'ORIGINAL',
+                  Var('b').pattern().recordField('foo')..errorId = 'DUPLICATE',
                 ],
               ),
+              [],
             ),
           ], expectedErrors: {
             'duplicateRecordPatternField(name: foo, original: ORIGINAL, '
@@ -2405,9 +2426,10 @@
               ifCase(
                 expr('dynamic').checkContext('?'),
                 recordPattern([
-                  Var('a', errorId: 'a').pattern(type: 'int').recordField(),
-                  Var('b', errorId: 'b').pattern().recordField(),
+                  Var('a').pattern(type: 'int').recordField(),
+                  Var('b').pattern().recordField(),
                 ]),
+                [],
               ).checkIr(
                 'ifCase(expr(dynamic), recordPattern(varPattern(a, '
                 'matchedType: dynamic, staticType: int), varPattern(b, '
@@ -2475,9 +2497,10 @@
                   ifCase(
                     expr('(int,)').checkContext('?'),
                     recordPattern([
-                      Var('a', errorId: 'a').pattern().recordField(),
-                      Var('b', errorId: 'b').pattern().recordField(),
+                      Var('a').pattern().recordField(),
+                      Var('b').pattern().recordField(),
                     ]),
+                    [],
                   ).checkIr('ifCase(expr((int)), recordPattern(varPattern(a, '
                       'matchedType: Object?, staticType: Object?), '
                       'varPattern(b, matchedType: Object?, staticType: '
@@ -2491,8 +2514,9 @@
                   ifCase(
                     expr('(int, String)').checkContext('?'),
                     recordPattern([
-                      Var('a', errorId: 'a').pattern().recordField(),
+                      Var('a').pattern().recordField(),
                     ]),
+                    [],
                   ).checkIr('ifCase(expr((int, String)), '
                       'recordPattern(varPattern(a, matchedType: Object?, '
                       'staticType: Object?), matchedType: (int, String), '
@@ -2509,9 +2533,10 @@
               ifCase(
                 expr('X').checkContext('?'),
                 recordPattern([
-                  Var('a', errorId: 'a').pattern(type: 'int').recordField(),
-                  Var('b', errorId: 'b').pattern().recordField(),
+                  Var('a').pattern(type: 'int').recordField(),
+                  Var('b').pattern().recordField(),
                 ]),
+                [],
               ).checkIr('ifCase(expr(X), recordPattern(varPattern(a, '
                   'matchedType: Object?, staticType: int), varPattern(b, '
                   'matchedType: Object?, staticType: Object?), matchedType: X, '
@@ -2528,9 +2553,10 @@
               ifCase(
                 expr('dynamic').checkContext('?'),
                 recordPattern([
-                  Var('a', errorId: 'a').pattern(type: 'int').recordField('a'),
-                  Var('b', errorId: 'b').pattern().recordField('b'),
+                  Var('a').pattern(type: 'int').recordField('a'),
+                  Var('b').pattern().recordField('b'),
                 ]),
+                [],
               ).checkIr('ifCase(expr(dynamic), recordPattern(varPattern(a, '
                   'matchedType: dynamic, staticType: int), varPattern(b, '
                   'matchedType: dynamic, staticType: dynamic), matchedType: '
@@ -2595,9 +2621,10 @@
                   ifCase(
                     expr('({int a})').checkContext('?'),
                     recordPattern([
-                      Var('a', errorId: 'a').pattern().recordField('a'),
-                      Var('b', errorId: 'b').pattern().recordField('b'),
+                      Var('a').pattern().recordField('a'),
+                      Var('b').pattern().recordField('b'),
                     ]),
+                    [],
                   ).checkIr('ifCase(expr(({int a})), recordPattern('
                       'varPattern(a, matchedType: Object?, staticType: '
                       'Object?), varPattern(b, matchedType: Object?, '
@@ -2611,8 +2638,9 @@
                   ifCase(
                     expr('({int a, String b})').checkContext('?'),
                     recordPattern([
-                      Var('a', errorId: 'a').pattern().recordField('a'),
+                      Var('a').pattern().recordField('a'),
                     ]),
+                    [],
                   ).checkIr('ifCase(expr(({int a, String b})), '
                       'recordPattern(varPattern(a, matchedType: Object?, '
                       'staticType: Object?), matchedType: ({int a, String b}), '
@@ -2629,9 +2657,10 @@
               ifCase(
                 expr('X').checkContext('?'),
                 recordPattern([
-                  Var('a', errorId: 'a').pattern(type: 'int').recordField('a'),
-                  Var('b', errorId: 'b').pattern().recordField('b'),
+                  Var('a').pattern(type: 'int').recordField('a'),
+                  Var('b').pattern().recordField('b'),
                 ]),
+                [],
               ).checkIr('ifCase(expr(X), recordPattern(varPattern(a, '
                   'matchedType: Object?, staticType: int), varPattern(b, '
                   'matchedType: Object?, staticType: Object?), matchedType: X, '
@@ -2645,11 +2674,10 @@
             ifCase(
               expr('({int a})'),
               recordPattern([
-                Var('a', errorId: 'a').pattern().recordField('a')
-                  ..errorId = 'ORIGINAL',
-                Var('b', errorId: 'b').pattern().recordField('a')
-                  ..errorId = 'DUPLICATE',
+                Var('a').pattern().recordField('a')..errorId = 'ORIGINAL',
+                Var('b').pattern().recordField('a')..errorId = 'DUPLICATE',
               ]),
+              [],
             ),
           ], expectedErrors: {
             'duplicateRecordPatternField(name: a, original: ORIGINAL, '
@@ -2686,6 +2714,7 @@
               null,
               intLiteral(0).checkContext('?'),
             ),
+            [],
           ).checkIr('ifCase(expr(int), relationalPattern(0, matchedType: int), '
               'variables(), true, block(), noop)')
         ]);
@@ -2703,6 +2732,7 @@
                 ),
                 intLiteral(0).checkContext('num'),
               ),
+              [],
             ).checkIr('ifCase(expr(int), relationalPattern(0, matchedType: '
                 'int), variables(), true, block(), noop)')
           ]);
@@ -2719,6 +2749,7 @@
                 ),
                 expr('int?').checkContext('Object'),
               ),
+              [],
             ).checkIr('ifCase(expr(Object), relationalPattern(expr(int?), '
                 'matchedType: Object), variables(), true, block(), noop)')
           ]);
@@ -2735,6 +2766,7 @@
                 ),
                 expr('int?').checkContext('Object'),
               ),
+              [],
             ).checkIr('ifCase(expr(Object), relationalPattern(expr(int?), '
                 'matchedType: Object), variables(), true, block(), noop)')
           ]);
@@ -2751,6 +2783,7 @@
                 ),
                 expr('String')..errorId = 'OPERAND',
               ),
+              [],
             ).checkIr('ifCase(expr(int), relationalPattern(expr(String), '
                 'matchedType: int), variables(), true, block(), noop)')
           ], expectedErrors: {
@@ -2771,6 +2804,7 @@
                 expr('String').checkContext('Object'),
                 errorId: 'PATTERN',
               ),
+              [],
             ).checkIr('ifCase(expr(A), relationalPattern(expr(String), '
                 'matchedType: A), variables(), true, block(), noop)')
           ], expectedErrors: {
@@ -2820,6 +2854,7 @@
           ifCase(
             expr('int'),
             wildcard(),
+            [],
           ).checkIr('ifCase(expr(int), varPattern(_, matchedType: int, '
               'staticType: int), variables(), true, block(), noop)'),
         ]);
@@ -2830,6 +2865,7 @@
           ifCase(
             expr('num'),
             wildcard(type: 'int'),
+            [],
           ).checkIr('ifCase(expr(num), varPattern(_, matchedType: num, '
               'staticType: int), variables(), true, block(), noop)'),
         ]);
diff --git a/pkg/analysis_server/lib/src/handler/legacy/search_get_element_declarations.dart b/pkg/analysis_server/lib/src/handler/legacy/search_get_element_declarations.dart
index 939df05..056ce5a 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/search_get_element_declarations.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/search_get_element_declarations.dart
@@ -47,6 +47,8 @@
           return protocol.ElementKind.ENUM;
         case search.DeclarationKind.ENUM_CONSTANT:
           return protocol.ElementKind.ENUM_CONSTANT;
+        case search.DeclarationKind.EXTENSION:
+          return protocol.ElementKind.EXTENSION;
         case search.DeclarationKind.FIELD:
           return protocol.ElementKind.FIELD;
         case search.DeclarationKind.FUNCTION:
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index c24299d..baec76e 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -299,13 +299,15 @@
     required ResolvedUnitResult unit,
     required int offset,
     required LineInfo lineInfo,
+    required bool Function(String input) filter,
   }) async {
     final request = DartSnippetRequest(
       unit: unit,
       offset: offset,
     );
     final snippetManager = DartSnippetManager();
-    final snippets = await snippetManager.computeSnippets(request);
+    final snippets =
+        await snippetManager.computeSnippets(request, filter: filter);
 
     return snippets.map((snippet) => snippetToCompletionItem(
           server,
@@ -527,6 +529,7 @@
               unit: unit,
               offset: offset,
               lineInfo: unit.lineInfo,
+              filter: fuzzy.stringMatches,
             );
             return snippets.where(fuzzy.completionItemMatches).toList();
           });
@@ -835,8 +838,10 @@
       : _matcher = FuzzyMatcher(prefix, matchStyle: MatchStyle.TEXT);
 
   bool completionItemMatches(CompletionItem item) =>
-      _matcher.score(item.filterText ?? item.label) > 0;
+      stringMatches(item.filterText ?? item.label);
 
   bool completionSuggestionMatches(CompletionSuggestion item) =>
-      _matcher.score(item.displayText ?? item.completion) > 0;
+      stringMatches(item.displayText ?? item.completion);
+
+  bool stringMatches(String input) => _matcher.score(input) > 0;
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index f9fb506..a5f7bf3 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -970,6 +970,8 @@
   status: hasFix
 CompileTimeErrorCode.RETURN_WITHOUT_VALUE:
   status: needsEvaluation
+CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
+  status: needsEvaluation
 CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY:
   status: needsEvaluation
 CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
index 458f2a9..6bccab2 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
@@ -11,6 +11,7 @@
 import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
 import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analysis_server/src/utilities/strings.dart';
 import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/analysis/features.dart';
@@ -73,13 +74,27 @@
 
   CompilationUnitElement get unitElement => unit.declaredElement!;
 
-  String get _declarationKeyword {
-    if (_isPartOfConstantExpression(singleExpression)) {
-      return 'const';
-    } else if (codeStyleOptions.makeLocalsFinal) {
-      return 'final';
+  String get _declarationKeywordAndType {
+    var useConst = stringLiteralPart == null &&
+        _isPartOfConstantExpression(singleExpression);
+    var useFinal = codeStyleOptions.makeLocalsFinal;
+
+    String? typeString;
+    if (codeStyleOptions.specifyTypes) {
+      typeString = singleExpression != null
+          ? singleExpression?.staticType
+              ?.getDisplayString(withNullability: unit.isNonNullableByDefault)
+          : stringLiteralPart != null
+              ? 'String'
+              : null;
+    }
+
+    if (useConst) {
+      return typeString != null ? 'const $typeString' : 'const';
+    } else if (useFinal) {
+      return typeString != null ? 'final $typeString' : 'final';
     } else {
-      return 'var';
+      return typeString ?? 'var';
     }
   }
 
@@ -137,9 +152,9 @@
     if (singleExpression != null &&
         singleExpression.parent is ExpressionStatement &&
         occurrences.length == 1) {
-      var keyword = _declarationKeyword;
-      var declarationSource = '$keyword $name = ';
-      var edit = SourceEdit(singleExpression.offset, 0, declarationSource);
+      var keywordAndType = _declarationKeywordAndType;
+      var declarationCode = '$keywordAndType $name = ';
+      var edit = SourceEdit(singleExpression.offset, 0, declarationCode);
       doSourceChange_addElementEdit(change, unitElement, edit);
       return Future.value(change);
     }
@@ -152,17 +167,15 @@
 
     // add variable declaration
     {
-      String declarationCode;
-      int nameOffsetInDeclarationCode;
+      var keywordAndType = _declarationKeywordAndType;
+      var declarationCode = '$keywordAndType ';
+      var nameOffsetInDeclarationCode = declarationCode.length;
       if (stringLiteralPart != null) {
-        declarationCode = 'var ';
-        nameOffsetInDeclarationCode = declarationCode.length;
+        // TODO(dantup): This does not correctly handle escaping (for example
+        //  unescaped single quotes in a double quoted string).
         declarationCode += "$name = '$stringLiteralPart';";
       } else {
-        var keyword = _declarationKeyword;
         var initializerCode = utils.getRangeText(selectionRange);
-        declarationCode = '$keyword ';
-        nameOffsetInDeclarationCode = declarationCode.length;
         declarationCode += '$name = $initializerCode;';
       }
       // prepare location for declaration
@@ -197,6 +210,7 @@
     // prepare replacement
     var occurrenceReplacement = name;
     if (stringLiteralPart != null) {
+      // TODO(dantup): Don't include braces if unnecessary.
       occurrenceReplacement = '\${$name}';
       occurrencesShift += 2;
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
index cb4f456..84ccad2 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
@@ -464,6 +464,8 @@
       nameNode = node;
     } else if (node is EnumConstantDeclaration) {
       nameNode = node.name;
+    } else if (node is ExtensionDeclaration) {
+      nameNode = node.name;
     } else if (node is FieldFormalParameter) {
       nameNode = node.name;
     } else if (node is ImportDirective) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
index f2e22b4..58e6a37 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
@@ -51,6 +51,9 @@
 
   @override
   String get refactoringName {
+    if (element is ExtensionElement) {
+      return 'Rename Extension';
+    }
     if (element is FunctionElement) {
       return 'Rename Top-Level Function';
     }
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/class_declaration.dart b/pkg/analysis_server/lib/src/services/snippets/dart/class_declaration.dart
index aa126db..a2e3362 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/class_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/class_declaration.dart
@@ -11,7 +11,10 @@
   static const prefix = 'class';
   static const label = 'class';
 
-  ClassDeclaration(super.request);
+  ClassDeclaration(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/do_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/do_statement.dart
index 4a58903..4c04ffe 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/do_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/do_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'do';
   static const label = 'do while';
 
-  DoStatement(super.request);
+  DoStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget.dart b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget.dart
index 00a79a8..4c8991a 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget.dart
@@ -21,7 +21,10 @@
   @override
   late ClassElement? classKey;
 
-  FlutterStatefulWidget(super.request);
+  FlutterStatefulWidget(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget_with_animation.dart b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget_with_animation.dart
index c970993..0073beb 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget_with_animation.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateful_widget_with_animation.dart
@@ -24,7 +24,11 @@
   late ClassElement? classAnimationController;
   late MixinElement? classSingleTickerProviderStateMixin;
 
-  FlutterStatefulWidgetWithAnimationController(super.request);
+  FlutterStatefulWidgetWithAnimationController(super.request,
+      {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateless_widget.dart b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateless_widget.dart
index 86ca320..31ed625 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateless_widget.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/flutter_stateless_widget.dart
@@ -19,7 +19,10 @@
   @override
   late ClassElement? classKey;
 
-  FlutterStatelessWidget(super.request);
+  FlutterStatelessWidget(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/for_in_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/for_in_statement.dart
index 06d1e0d..ac1484a 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/for_in_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/for_in_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'forin';
   static const label = 'for in';
 
-  ForInStatement(super.request);
+  ForInStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/for_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/for_statement.dart
index 557bb11..702caeb 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/for_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/for_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'for';
   static const label = 'for';
 
-  ForStatement(super.request);
+  ForStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/function_declaration.dart b/pkg/analysis_server/lib/src/services/snippets/dart/function_declaration.dart
index 5471752..ebcfcad 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/function_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/function_declaration.dart
@@ -11,7 +11,10 @@
   static const prefix = 'fun';
   static const label = 'fun';
 
-  FunctionDeclaration(super.request);
+  FunctionDeclaration(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/if_else_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/if_else_statement.dart
index 78b1b88..08665e8 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/if_else_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/if_else_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'ife';
   static const label = 'ife';
 
-  IfElseStatement(super.request);
+  IfElseStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/if_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/if_statement.dart
index 3f667b1..260562b 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/if_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/if_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'if';
   static const label = 'if';
 
-  IfStatement(super.request);
+  IfStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/main_function.dart b/pkg/analysis_server/lib/src/services/snippets/dart/main_function.dart
index 69976c5..c065ff3 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/main_function.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/main_function.dart
@@ -15,7 +15,10 @@
   static const prefix = 'main';
   static const label = 'main()';
 
-  MainFunction(super.request);
+  MainFunction(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   /// Whether to insert a `List<String> args` parameter in the generated
   /// function.
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/switch_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/switch_statement.dart
index 5896568..ce8438c 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/switch_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/switch_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'switch';
   static const label = 'switch case';
 
-  SwitchStatement(super.request);
+  SwitchStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/test_definition.dart b/pkg/analysis_server/lib/src/services/snippets/dart/test_definition.dart
index 29a348d..b53cf87 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/test_definition.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/test_definition.dart
@@ -11,7 +11,10 @@
   static const prefix = 'test';
   static const label = 'test';
 
-  TestDefinition(super.request);
+  TestDefinition(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/test_group_definition.dart b/pkg/analysis_server/lib/src/services/snippets/dart/test_group_definition.dart
index 5bb4616..a2828d4 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/test_group_definition.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/test_group_definition.dart
@@ -11,7 +11,10 @@
   static const prefix = 'group';
   static const label = 'group';
 
-  TestGroupDefinition(super.request);
+  TestGroupDefinition(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/try_catch_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/try_catch_statement.dart
index 5320ab3..d3da865 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/try_catch_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/try_catch_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'try';
   static const label = 'try';
 
-  TryCatchStatement(super.request);
+  TryCatchStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/dart/while_statement.dart b/pkg/analysis_server/lib/src/services/snippets/dart/while_statement.dart
index 48776ad..0163052 100644
--- a/pkg/analysis_server/lib/src/services/snippets/dart/while_statement.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/dart/while_statement.dart
@@ -11,7 +11,10 @@
   static const prefix = 'while';
   static const label = 'while';
 
-  WhileStatement(super.request);
+  WhileStatement(super.request, {required super.elementImportCache});
+
+  @override
+  String get snippetPrefix => prefix;
 
   @override
   Future<Snippet> compute() async {
diff --git a/pkg/analysis_server/lib/src/services/snippets/snippet_manager.dart b/pkg/analysis_server/lib/src/services/snippets/snippet_manager.dart
index 26b94bf..5d4a2b1 100644
--- a/pkg/analysis_server/lib/src/services/snippets/snippet_manager.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/snippet_manager.dart
@@ -24,9 +24,11 @@
 import 'package:analysis_server/src/services/snippets/snippet_context.dart';
 import 'package:analysis_server/src/services/snippets/snippet_producer.dart';
 import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 
-typedef SnippetProducerGenerator = SnippetProducer Function(DartSnippetRequest);
+typedef SnippetProducerGenerator = SnippetProducer Function(DartSnippetRequest,
+    {required Map<Element, LibraryElement?> elementImportCache});
 
 /// [DartSnippetManager] determines if a snippet request is Dart specific
 /// and forwards those requests to all Snippet Producers that return `true` from
@@ -61,8 +63,9 @@
   };
 
   Future<List<Snippet>> computeSnippets(
-    DartSnippetRequest request,
-  ) async {
+    DartSnippetRequest request, {
+    bool Function(String input)? filter,
+  }) async {
     var pathContext = request.resourceProvider.pathContext;
     if (!file_paths.isDart(pathContext, request.filePath)) {
       return const [];
@@ -74,9 +77,12 @@
       if (generators == null) {
         return snippets;
       }
+      final elementImportCache = <Element, LibraryElement?>{};
       for (final generator in generators) {
-        final producer = generator(request);
-        if (await producer.isValid()) {
+        final producer =
+            generator(request, elementImportCache: elementImportCache);
+        final matchesFilter = filter?.call(producer.snippetPrefix) ?? true;
+        if (matchesFilter && await producer.isValid()) {
           snippets.add(await producer.compute());
         }
       }
diff --git a/pkg/analysis_server/lib/src/services/snippets/snippet_producer.dart b/pkg/analysis_server/lib/src/services/snippets/snippet_producer.dart
index 5f04c48..7b8bd56 100644
--- a/pkg/analysis_server/lib/src/services/snippets/snippet_producer.dart
+++ b/pkg/analysis_server/lib/src/services/snippets/snippet_producer.dart
@@ -24,12 +24,26 @@
   final LibraryElement libraryElement;
   final bool useSuperParams;
 
-  DartSnippetProducer(super.request)
+  /// Elements that need to be imported for generated code to be valid.
+  ///
+  /// Calling [addImports] will add any required imports to the supplied
+  /// builder.
+  final Set<Element> requiredElementImports = {};
+
+  /// A cache of mappings from Elements to their public Library Elements.
+  ///
+  /// Callers can share this cache across multiple snippet producers to avoid
+  /// repeated searches where they may add imports for the same elements.
+  final Map<Element, LibraryElement?> _elementImportCache;
+
+  DartSnippetProducer(super.request,
+      {required Map<Element, LibraryElement?> elementImportCache})
       : sessionHelper = AnalysisSessionHelper(request.analysisSession),
         utils = CorrectionUtils(request.unit),
         libraryElement = request.unit.libraryElement,
         useSuperParams = request.unit.libraryElement.featureSet
-            .isEnabled(Feature.super_parameters);
+            .isEnabled(Feature.super_parameters),
+        _elementImportCache = elementImportCache;
 
   CodeStyleOptions get codeStyleOptions =>
       sessionHelper.session.analysisContext.analysisOptions.codeStyleOptions;
@@ -44,6 +58,14 @@
   NullabilitySuffix get nullableSuffix => libraryElement.isNonNullableByDefault
       ? NullabilitySuffix.question
       : NullabilitySuffix.none;
+
+  /// Adds public imports for any elements fetched by [getClass] and [getMixin]
+  /// to [builder].
+  Future<void> addImports(DartFileEditBuilder builder) async {
+    final dartBuilder = builder as DartFileEditBuilderImpl;
+    await Future.wait(requiredElementImports.map((element) => dartBuilder
+        .importElementLibrary(element, resultCache: _elementImportCache)));
+  }
 }
 
 abstract class FlutterSnippetProducer extends DartSnippetProducer {
@@ -52,27 +74,12 @@
   late ClassElement? classWidget;
   late ClassElement? classPlaceholder;
 
-  /// Elements that need to be imported for generated code to be valid.
-  ///
-  /// Calling [getClass] or [getMixin] records elements in this set.
-  /// Calling [addImports] will add any required imports to the supplied
-  /// builder.
-  final Set<Element> _requiredElementImports = {};
-
-  FlutterSnippetProducer(super.request);
-
-  /// Adds public imports for any elements fetched by [getClass] and [getMixin]
-  /// to [builder].
-  Future<void> addImports(DartFileEditBuilder builder) async {
-    final dartBuilder = builder as DartFileEditBuilderImpl;
-    await Future.wait(
-        _requiredElementImports.map(dartBuilder.importElementLibrary));
-  }
+  FlutterSnippetProducer(super.request, {required super.elementImportCache});
 
   Future<ClassElement?> getClass(String name) async {
     final class_ = await sessionHelper.getClass(flutter.widgetsUri, name);
     if (class_ != null) {
-      _requiredElementImports.add(class_);
+      requiredElementImports.add(class_);
     }
     return class_;
   }
@@ -80,7 +87,7 @@
   Future<MixinElement?> getMixin(String name) async {
     final mixin = await sessionHelper.getMixin(flutter.widgetsUri, name);
     if (mixin != null) {
-      _requiredElementImports.add(mixin);
+      requiredElementImports.add(mixin);
     }
     return mixin;
   }
@@ -192,6 +199,9 @@
 
   SnippetProducer(this.request);
 
+  /// The prefix a user types to use this snippet.
+  String get snippetPrefix;
+
   Future<Snippet> compute();
 
   Future<bool> isValid() async {
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index 18a9365..9707959 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -105,20 +105,20 @@
         InstrumentationService.NULL_SERVICE);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/50496')
-  Future<void> test_cache() async {
+  /// See https://github.com/dart-lang/sdk/issues/50496
+  Future<void> test_caching_mixin_superInvokedNames_setter_change() async {
     var lib = convertPath('/lib');
     newFolder(lib);
     var foo = newFile('/lib/foo.dart', '''
-abstract class A {
-  set foo(_);
+class A {
+  set foo(int _) {}
 }
 mixin M on A {
   void bar() {
-    super.foo = 0;
+    super.boo = 0;
   }
 }
-abstract class X extends A with M {}
+class X extends A with M {}
 ''');
     await server.setAnalysisRoots('0', [lib], []);
     await server.onAnalysisComplete;
@@ -127,32 +127,15 @@
 
     server.updateContent('0', {
       foo.path: AddContentOverlay('''
-abstract class A {
-  set boo(_);
+class A {
+  set foo(int _) {}
 }
 mixin M on A {
   void bar() {
     super.foo = 0;
   }
 }
-abstract class X extends A with M {}
-''')
-    });
-    await server.onAnalysisComplete;
-    expect(server.statusAnalyzing, isFalse);
-    channel.notificationsReceived.clear();
-
-    server.updateContent('0', {
-      foo.path: AddContentOverlay('''
-abstract class A {
-  set boo(_);
-}
-mixin M on A {
-  void bar() {
-    super.boo = 0;
-  }
-}
-abstract class X extends A with M {}
+class X extends A with M {}
 ''')
     });
     await server.onAnalysisComplete;
@@ -161,13 +144,9 @@
     expect(notifications, hasLength(1));
     var notification = notifications.first;
     expect(notification.event, 'analysis.errors');
-    var params = notification.params;
-    expect(params, isNotNull);
-    var errors = params!['errors'] as List<Map<String, dynamic>>;
-    expect(errors, hasLength(1));
-    var error = errors.first;
-    var message = error['message'];
-    expect(message, contains("boo"));
+    var params = notification.params!;
+    var errors = params['errors'] as List<Map<String, Object?>>;
+    expect(errors, isEmpty);
   }
 
   /// Test that modifying package_config again while a context rebuild is in
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index c759aa8..d80bd8c 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -1971,6 +1971,64 @@
     );
   }
 
+  Future<void> test_extension_atDeclaration() {
+    addTestFile('''
+extension Test on int {
+  void foo() {}
+}
+void f() {
+  Test(0).foo();
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('Test on int', 'NewName');
+      },
+      '''
+extension NewName on int {
+  void foo() {}
+}
+void f() {
+  NewName(0).foo();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 10);
+        expect(renameFeedback.length, 4);
+      },
+    );
+  }
+
+  Future<void> test_extension_atReference() {
+    addTestFile('''
+extension Test on int {
+  void foo() {}
+}
+void f() {
+  Test(0).foo();
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('Test(0)', 'NewName');
+      },
+      '''
+extension NewName on int {
+  void foo() {}
+}
+void f() {
+  NewName(0).foo();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 55);
+        expect(renameFeedback.length, 4);
+      },
+    );
+  }
+
   Future<void> test_feedback() {
     addTestFile('''
 class Test {}
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index 25ecaaf..bc83abc 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -82,6 +82,37 @@
     assertHas('c', ElementKind.ENUM_CONSTANT);
   }
 
+  Future<void> test_extension() async {
+    addTestFile(r'''
+extension E on int {
+  int get foo01 => 0;
+  void set foo02(_) {}
+  void foo03() {}
+}
+''');
+    await _getDeclarations();
+
+    assertHas('E', ElementKind.EXTENSION);
+
+    {
+      var declaration = assertHas('foo01', ElementKind.GETTER);
+      expect(declaration.codeOffset, 23);
+      expect(declaration.codeLength, 19);
+    }
+
+    {
+      var declaration = assertHas('foo02', ElementKind.SETTER);
+      expect(declaration.codeOffset, 45);
+      expect(declaration.codeLength, 20);
+    }
+
+    {
+      var declaration = assertHas('foo03', ElementKind.METHOD);
+      expect(declaration.codeOffset, 68);
+      expect(declaration.codeLength, 15);
+    }
+  }
+
   Future<void> test_maxResults() async {
     newFile('$testPackageLibPath/a.dart', r'''
 class A {}
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/extract_local_test.dart
index a788a47..c770276 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/extract_local_test.dart
@@ -737,7 +737,109 @@
     expect(refactoring.isAvailable(), isTrue);
   }
 
-  Future<void> test_lint_prefer_final_locals() async {
+  Future<void> test_lint_alwaysSpecifyTypes() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await indexTestUnit('''
+void f() {
+  print(1 + 2);
+}
+''');
+    _createRefactoringForString('1 + 2');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+void f() {
+  int res = 1 + 2;
+  print(res);
+}
+''');
+  }
+
+  Future<void> test_lint_alwaysSpecifyTypes_const() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await indexTestUnit('''
+void f() {
+  const <int>[1, 2];
+}
+''');
+    _createRefactoringForString('1');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+void f() {
+  const int res = 1;
+  const <int>[res, 2];
+}
+''');
+  }
+
+  Future<void> test_lint_alwaysSpecifyTypes_final() async {
+    createAnalysisOptionsFile(
+        lints: [LintNames.always_specify_types, LintNames.prefer_final_locals]);
+    await indexTestUnit('''
+void f() {
+  print(1 + 2);
+}
+''');
+    _createRefactoringForString('1 + 2');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+void f() {
+  final int res = 1 + 2;
+  print(res);
+}
+''');
+  }
+
+  Future<void> test_lint_alwaysSpecifyTypes_functionExpressionBody() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await indexTestUnit('''
+foo(Point p) => p.x * p.x + p.y * p.y;
+class Point {int x = 0; int y = 0;}
+''');
+    _createRefactoringForString('p.x');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+foo(Point p) {
+  int res = p.x;
+  return res * res + p.y * p.y;
+}
+class Point {int x = 0; int y = 0;}
+''');
+  }
+
+  Future<void> test_lint_alwaysSpecifyTypes_statement() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await indexTestUnit('''
+void f(String p) {
+  p.toString();
+}
+''');
+    _createRefactoringForString('p.toString()');
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+void f(String p) {
+  String res = p.toString();
+}
+''');
+  }
+
+  Future<void> test_lint_alwaysSpecifyTypes_stringLiteralPart() async {
+    createAnalysisOptionsFile(lints: [LintNames.always_specify_types]);
+    await indexTestUnit('''
+void f() {
+  print('abcdefgh');
+}
+''');
+    _createRefactoringForString('cde');
+    // apply refactoring
+    return _assertSuccessfulRefactoring(r'''
+void f() {
+  String res = 'cde';
+  print('ab${res}fgh');
+}
+''');
+  }
+
+  Future<void> test_lint_preferFinalLocals() async {
     createAnalysisOptionsFile(lints: [LintNames.prefer_final_locals]);
     await indexTestUnit('''
 void f() {
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/rename_unit_member_test.dart
index 2f746a8..71c6671 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/rename_unit_member_test.dart
@@ -619,6 +619,58 @@
 ''');
   }
 
+  Future<void> test_createChange_ExtensionElement_atDeclaration() async {
+    await indexTestUnit('''
+extension Test on int {
+  void foo() {}
+}
+void f() {
+  Test(0).foo();
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('Test on int');
+    expect(refactoring.refactoringName, 'Rename Extension');
+    expect(refactoring.elementKindName, 'extension');
+    expect(refactoring.oldName, 'Test');
+    refactoring.newName = 'NewName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+extension NewName on int {
+  void foo() {}
+}
+void f() {
+  NewName(0).foo();
+}
+''');
+  }
+
+  Future<void> test_createChange_ExtensionElement_atReference() async {
+    await indexTestUnit('''
+extension Test on int {
+  void foo() {}
+}
+void f() {
+  Test(0).foo();
+}
+''');
+    // configure refactoring
+    createRenameRefactoringAtString('Test(0)');
+    expect(refactoring.refactoringName, 'Rename Extension');
+    expect(refactoring.elementKindName, 'extension');
+    expect(refactoring.oldName, 'Test');
+    refactoring.newName = 'NewName';
+    // validate change
+    return assertSuccessfulRefactoring('''
+extension NewName on int {
+  void foo() {}
+}
+void f() {
+  NewName(0).foo();
+}
+''');
+  }
+
   Future<void> test_createChange_FunctionElement() async {
     await indexTestUnit('''
 test() {}
diff --git a/pkg/analysis_server/test/services/snippets/dart/test_support.dart b/pkg/analysis_server/test/services/snippets/dart/test_support.dart
index 5c206e7..5b39c13 100644
--- a/pkg/analysis_server/test/services/snippets/dart/test_support.dart
+++ b/pkg/analysis_server/test/services/snippets/dart/test_support.dart
@@ -36,7 +36,7 @@
       offset: offsetFromMarker(code),
     );
 
-    final producer = generator(request);
+    final producer = generator(request, elementImportCache: {});
     expect(await producer.isValid(), isFalse);
   }
 
@@ -47,7 +47,7 @@
       offset: offsetFromMarker(code),
     );
 
-    final producer = generator(request);
+    final producer = generator(request, elementImportCache: {});
     expect(await producer.isValid(), isTrue);
     return producer.compute();
   }
diff --git a/pkg/analysis_server/test/services/snippets/snippet_manager_test.dart b/pkg/analysis_server/test/services/snippets/snippet_manager_test.dart
index ae98fe8..beb9645 100644
--- a/pkg/analysis_server/test/services/snippets/snippet_manager_test.dart
+++ b/pkg/analysis_server/test/services/snippets/snippet_manager_test.dart
@@ -7,7 +7,8 @@
 import 'package:analysis_server/src/services/snippets/snippet_context.dart';
 import 'package:analysis_server/src/services/snippets/snippet_manager.dart';
 import 'package:analysis_server/src/services/snippets/snippet_producer.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -21,6 +22,36 @@
 
 @reflectiveTest
 class SnippetManagerTest extends AbstractSingleUnitTest {
+  Future<void> test_filter_match() async {
+    await resolveTestCode('');
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: 0,
+    );
+
+    final manager = _TestDartSnippetManager({
+      SnippetContext.atTopLevel: [_ValidSnippetProducer.newInstance],
+    });
+    final results =
+        await manager.computeSnippets(request, filter: (String s) => true);
+    expect(results, isNotEmpty);
+  }
+
+  Future<void> test_filter_noMatch() async {
+    await resolveTestCode('');
+    final request = DartSnippetRequest(
+      unit: testAnalysisResult,
+      offset: 0,
+    );
+
+    final manager = _TestDartSnippetManager({
+      SnippetContext.atTopLevel: [_ValidSnippetProducer.newInstance],
+    });
+    final results =
+        await manager.computeSnippets(request, filter: (String s) => false);
+    expect(results, isEmpty);
+  }
+
   Future<void> test_notValidProducers() async {
     await resolveTestCode('');
     final request = DartSnippetRequest(
@@ -45,7 +76,11 @@
     final manager = _TestDartSnippetManager({
       SnippetContext.atTopLevel: [_ValidSnippetProducer.newInstance],
       SnippetContext.inClass: [
-        (context) => throw 'Tried to create producer for wrong context',
+        (
+          context, {
+          required Map<Element, LibraryElement?> elementImportCache,
+        }) =>
+            throw 'Tried to create producer for wrong context',
       ]
     });
     final results = await manager.computeSnippets(request);
@@ -76,6 +111,9 @@
   _NotValidSnippetProducer._(super.request);
 
   @override
+  String get snippetPrefix => 'invalid';
+
+  @override
   Future<Snippet> compute() {
     throw UnsupportedError(
       'compute should not be called for a producer '
@@ -86,7 +124,8 @@
   @override
   Future<bool> isValid() async => false;
 
-  static _NotValidSnippetProducer newInstance(DartSnippetRequest request) =>
+  static _NotValidSnippetProducer newInstance(DartSnippetRequest request,
+          {required Map<Element, LibraryElement?> elementImportCache}) =>
       _NotValidSnippetProducer._(request);
 }
 
@@ -103,9 +142,12 @@
   _ValidSnippetProducer._(super.request);
 
   @override
+  String get snippetPrefix => 'mysnip';
+
+  @override
   Future<Snippet> compute() async {
     return Snippet(
-      'mysnip',
+      snippetPrefix,
       'My Test Snippet',
       'This is a test snippet',
       SourceChange('message'),
@@ -115,6 +157,7 @@
   @override
   Future<bool> isValid() async => true;
 
-  static _ValidSnippetProducer newInstance(DartSnippetRequest request) =>
+  static _ValidSnippetProducer newInstance(DartSnippetRequest request,
+          {required Map<Element, LibraryElement?> elementImportCache}) =>
       _ValidSnippetProducer._(request);
 }
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 037b7e6..07bf9d5 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 5.3.1
+* Require `collection: ^1.17.0` because we use `elementAtOrNull`.
+
+## 5.3.0
+* Use `3.0.0` as the current language version.
+
 ## 5.2.0
 * Deprecated `Element.enclosingElement3`, use `enclosingElement` instead.
 * Deprecated `Directive.element2`, use `element` instead.
diff --git a/pkg/analyzer/lib/dart/analysis/code_style_options.dart b/pkg/analyzer/lib/dart/analysis/code_style_options.dart
index 5c968a6..f510dcf 100644
--- a/pkg/analyzer/lib/dart/analysis/code_style_options.dart
+++ b/pkg/analyzer/lib/dart/analysis/code_style_options.dart
@@ -24,6 +24,9 @@
   /// class members.
   bool get sortConstructorsFirst;
 
+  /// Return `true` if types should be specified whenever possible.
+  bool get specifyTypes;
+
   /// Return `true` if the formatter should be used on code changes in this
   /// context.
   bool get useFormatter;
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 1220e11..b6a9cbd 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -218,6 +218,23 @@
   Token get semicolon;
 }
 
+/// A variable pattern in [PatternAssignment].
+///
+///    variablePattern ::= identifier
+///
+/// Clients may not extend, implement or mix-in this class.
+@experimental
+abstract class AssignedVariablePattern implements DartPattern {
+  /// Return the element referenced by this pattern, or `null` if either
+  /// [name] does not resolve to an element, or the AST structure has not
+  /// been resolved. In valid code this will be either [LocalVariableElement]
+  /// or [ParameterElement].
+  Element? get element;
+
+  /// The name of the variable being referenced.
+  Token get name;
+}
+
 /// An assignment expression.
 ///
 ///    assignmentExpression ::=
@@ -363,6 +380,8 @@
 
   R? visitAssertStatement(AssertStatement assertStatement);
 
+  R? visitAssignedVariablePattern(AssignedVariablePattern node);
+
   R? visitAssignmentExpression(AssignmentExpression node);
 
   R? visitAugmentationImportDirective(AugmentationImportDirective node);
@@ -421,6 +440,8 @@
 
   R? visitDeclaredIdentifier(DeclaredIdentifier node);
 
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node);
+
   R? visitDefaultFormalParameter(DefaultFormalParameter node);
 
   R? visitDoStatement(DoStatement node);
@@ -668,8 +689,6 @@
 
   R? visitVariableDeclarationStatement(VariableDeclarationStatement node);
 
-  R? visitVariablePattern(VariablePattern node);
-
   R? visitWhenClause(WhenClause node);
 
   R? visitWhileStatement(WhileStatement node);
@@ -1645,7 +1664,9 @@
 /// A pattern.
 ///
 ///    pattern ::=
-///        [BinaryPattern]
+///        [AssignedVariablePattern]
+///      | [BinaryPattern]
+///      | [DeclaredVariablePattern]
 ///      | [CastPattern]
 ///      | [ConstantPattern]
 ///      | [ListPattern]
@@ -1655,7 +1676,6 @@
 ///      | [PostfixPattern]
 ///      | [RecordPattern]
 ///      | [RelationalPattern]
-///      | [VariablePattern]
 ///
 /// Clients may not extend, implement or mix-in this class.
 @experimental
@@ -1725,6 +1745,32 @@
   TypeAnnotation? get type;
 }
 
+/// A variable pattern that declares a variable.
+///
+///    variablePattern ::=
+///        ( 'var' | 'final' | 'final'? [TypeAnnotation])? [Identifier]
+///
+/// Clients may not extend, implement or mix-in this class.
+@experimental
+abstract class DeclaredVariablePattern implements DartPattern {
+  /// Return the element associated with this declaration, or `null` if either
+  /// the variable name is `_` (in which case no variable is defined) or the AST
+  /// structure has not been resolved.
+  VariablePatternElement? get declaredElement;
+
+  /// The 'var' or 'final' keyword used when there is no [type], or `null` if a
+  /// type is given.
+  Token? get keyword;
+
+  /// The name of the variable being bound, if `_` then no variable is bound,
+  /// and [declaredElement] is `null`.
+  Token get name;
+
+  /// The type that the variable is required to match, or `null` if any type is
+  /// matched.
+  TypeAnnotation? get type;
+}
+
 /// A formal parameter with a default value.
 ///
 /// There are two kinds of parameters that are both represented by this class:
@@ -5391,31 +5437,6 @@
   VariableDeclarationList get variables;
 }
 
-/// A variable pattern.
-///
-///    variablePattern ::=
-///        ( 'var' | 'final' | [TypeAnnotation])? [Identifier]
-///
-/// Clients may not extend, implement or mix-in this class.
-@experimental
-abstract class VariablePattern implements DartPattern {
-  /// Return the element associated with this declaration, or `null` if either
-  /// the variable name is `_` (in which case no variable is defined) or the AST
-  /// structure has not been resolved.
-  VariablePatternElement? get declaredElement;
-
-  /// The 'var' or 'final' keyword used when there is no [type], or `null` if a
-  /// type is given.
-  Token? get keyword;
-
-  /// The name of the variable being bound.
-  Token get name;
-
-  /// The type that the variable is required to match, or `null` if any type is
-  /// matched.
-  TypeAnnotation? get type;
-}
-
 /// A guard in a pattern-based `case` in a `switch` statement, `switch`
 /// expression, `if` statement, or `if` element.
 ///
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index 0617f94..35615eb 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -150,6 +150,10 @@
   R? visitAssertStatement(AssertStatement node) => visitStatement(node);
 
   @override
+  R? visitAssignedVariablePattern(AssignedVariablePattern node) =>
+      visitDartPattern(node);
+
+  @override
   R? visitAssignmentExpression(AssignmentExpression node) =>
       visitExpression(node);
 
@@ -260,6 +264,10 @@
   R? visitDeclaredIdentifier(DeclaredIdentifier node) => visitDeclaration(node);
 
   @override
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node) =>
+      visitDartPattern(node);
+
+  @override
   R? visitDefaultFormalParameter(DefaultFormalParameter node) =>
       visitFormalParameter(node);
 
@@ -734,9 +742,6 @@
       visitStatement(node);
 
   @override
-  R? visitVariablePattern(VariablePattern node) => visitDartPattern(node);
-
-  @override
   R? visitWhenClause(WhenClause node) => visitNode(node);
 
   @override
@@ -800,6 +805,12 @@
   }
 
   @override
+  R? visitAssignedVariablePattern(AssignedVariablePattern node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  @override
   R? visitAssignmentExpression(AssignmentExpression node) {
     node.visitChildren(this);
     return null;
@@ -974,6 +985,12 @@
   }
 
   @override
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node) {
+    node.visitChildren(this);
+    return null;
+  }
+
+  @override
   R? visitDefaultFormalParameter(DefaultFormalParameter node) {
     node.visitChildren(this);
     return null;
@@ -1710,12 +1727,6 @@
   }
 
   @override
-  R? visitVariablePattern(VariablePattern node) {
-    node.visitChildren(this);
-    return null;
-  }
-
-  @override
   R? visitWhenClause(WhenClause node) {
     node.visitChildren(this);
     return null;
@@ -1769,6 +1780,9 @@
   R? visitAssertStatement(AssertStatement node) => null;
 
   @override
+  R? visitAssignedVariablePattern(AssignedVariablePattern node) => null;
+
+  @override
   R? visitAssignmentExpression(AssignmentExpression node) => null;
 
   @override
@@ -1856,6 +1870,9 @@
   R? visitDeclaredIdentifier(DeclaredIdentifier node) => null;
 
   @override
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node) => null;
+
+  @override
   R? visitDefaultFormalParameter(DefaultFormalParameter node) => null;
 
   @override
@@ -2237,9 +2254,6 @@
       null;
 
   @override
-  R? visitVariablePattern(VariablePattern node) => null;
-
-  @override
   R? visitWhenClause(WhenClause node) => null;
 
   @override
@@ -2282,6 +2296,9 @@
   R? visitAssertStatement(AssertStatement node) => _throw(node);
 
   @override
+  R? visitAssignedVariablePattern(AssignedVariablePattern node) => _throw(node);
+
+  @override
   R? visitAssignmentExpression(AssignmentExpression node) => _throw(node);
 
   @override
@@ -2371,6 +2388,9 @@
   R? visitDeclaredIdentifier(DeclaredIdentifier node) => _throw(node);
 
   @override
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node) => _throw(node);
+
+  @override
   R? visitDefaultFormalParameter(DefaultFormalParameter node) => _throw(node);
 
   @override
@@ -2759,9 +2779,6 @@
       _throw(node);
 
   @override
-  R? visitVariablePattern(VariablePattern node) => _throw(node);
-
-  @override
   R? visitWhenClause(WhenClause node) => _throw(node);
 
   @override
@@ -2842,6 +2859,14 @@
   }
 
   @override
+  T? visitAssignedVariablePattern(AssignedVariablePattern node) {
+    stopwatch.start();
+    T? result = _baseVisitor.visitAssignedVariablePattern(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T? visitAssignmentExpression(AssignmentExpression node) {
     stopwatch.start();
     T? result = _baseVisitor.visitAssignmentExpression(node);
@@ -3074,6 +3099,14 @@
   }
 
   @override
+  T? visitDeclaredVariablePattern(DeclaredVariablePattern node) {
+    stopwatch.start();
+    T? result = _baseVisitor.visitDeclaredVariablePattern(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T? visitDefaultFormalParameter(DefaultFormalParameter node) {
     stopwatch.start();
     T? result = _baseVisitor.visitDefaultFormalParameter(node);
@@ -4054,14 +4087,6 @@
   }
 
   @override
-  T? visitVariablePattern(VariablePattern node) {
-    stopwatch.start();
-    T? result = _baseVisitor.visitVariablePattern(node);
-    stopwatch.stop();
-    return result;
-  }
-
-  @override
   T? visitWhenClause(WhenClause node) {
     stopwatch.start();
     T? result = _baseVisitor.visitWhenClause(node);
@@ -4128,6 +4153,10 @@
   R? visitAssertStatement(AssertStatement node) => visitNode(node);
 
   @override
+  R? visitAssignedVariablePattern(AssignedVariablePattern node) =>
+      visitNode(node);
+
+  @override
   R? visitAssignmentExpression(AssignmentExpression node) => visitNode(node);
 
   @override
@@ -4218,6 +4247,10 @@
   R? visitDeclaredIdentifier(DeclaredIdentifier node) => visitNode(node);
 
   @override
+  R? visitDeclaredVariablePattern(DeclaredVariablePattern node) =>
+      visitNode(node);
+
+  @override
   R? visitDefaultFormalParameter(DefaultFormalParameter node) =>
       visitNode(node);
 
@@ -4620,9 +4653,6 @@
       visitNode(node);
 
   @override
-  R? visitVariablePattern(VariablePattern node) => visitNode(node);
-
-  @override
   R? visitWhenClause(WhenClause node) => visitNode(node);
 
   @override
diff --git a/pkg/analyzer/lib/src/analysis_options/code_style_options.dart b/pkg/analyzer/lib/src/analysis_options/code_style_options.dart
index 4225b48..66a02e9 100644
--- a/pkg/analyzer/lib/src/analysis_options/code_style_options.dart
+++ b/pkg/analyzer/lib/src/analysis_options/code_style_options.dart
@@ -30,6 +30,9 @@
   bool get sortConstructorsFirst => _isLintEnabled('sort_constructors_first');
 
   @override
+  bool get specifyTypes => _isLintEnabled('always_specify_types');
+
+  @override
   bool get useRelativeUris => _isLintEnabled('prefer_relative_imports');
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 0254806..ffa435e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -85,7 +85,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 251;
+  static const int DATA_VERSION = 252;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
index 25d679a..6fa2e17 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/invokes_super_self.dart';
+import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/summary/api_signature.dart';
 import 'package:collection/collection.dart';
@@ -150,6 +151,7 @@
   void _addMixin(MixinDeclaration node) {
     _addTokens(node.beginToken, node.leftBracket);
     _addClassMembers(node.members, false);
+    signature.addStringList(node.superInvokedNames);
   }
 
   void _addNode(AstNode? node) {
@@ -227,3 +229,12 @@
     }
   }
 }
+
+extension on MixinDeclaration {
+  List<String> get superInvokedNames {
+    var names = <String>{};
+    var collector = MixinSuperInvokedNamesCollector(names);
+    accept(collector);
+    return names.toList(growable: false);
+  }
+}
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index f7d7be2..7a3f388 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -657,6 +657,55 @@
   }
 }
 
+/// A variable pattern in [PatternAssignment].
+///
+///    variablePattern ::= identifier
+@experimental
+class AssignedVariablePatternImpl extends DartPatternImpl
+    implements AssignedVariablePattern {
+  @override
+  Element? element;
+
+  @override
+  final Token name;
+
+  AssignedVariablePatternImpl({
+    required this.name,
+  });
+
+  @override
+  Token get beginToken => name;
+
+  @override
+  Token get endToken => name;
+
+  @override
+  ChildEntities get _childEntities =>
+      super._childEntities..addToken('name', name);
+
+  @override
+  E? accept<E>(AstVisitor<E> visitor) {
+    return visitor.visitAssignedVariablePattern(this);
+  }
+
+  @override
+  DartType computePatternSchema(ResolverVisitor resolverVisitor) {
+    throw UnimplementedError('TODO(scheglov)');
+  }
+
+  @override
+  void resolvePattern(
+    ResolverVisitor resolverVisitor,
+    DartType matchedType,
+    SharedMatchContext context,
+  ) {
+    throw UnimplementedError('TODO(scheglov)');
+  }
+
+  @override
+  void visitChildren(AstVisitor visitor) {}
+}
+
 /// An assignment expression.
 ///
 ///    assignmentExpression ::=
@@ -1135,7 +1184,8 @@
     DartType matchedType,
     SharedMatchContext context,
   ) {
-    assert(operator.type == TokenType.AMPERSAND_AMPERSAND || operator.type == TokenType.BAR_BAR);
+    assert(operator.type == TokenType.AMPERSAND_AMPERSAND ||
+        operator.type == TokenType.BAR_BAR);
     resolverVisitor.analyzeLogicalPattern(
         matchedType, context, this, leftOperand, rightOperand,
         isAnd: operator.type == TokenType.AMPERSAND_AMPERSAND);
@@ -3352,7 +3402,9 @@
 /// A pattern.
 ///
 ///    pattern ::=
-///        [BinaryPattern]
+///        [AssignedVariablePattern]
+///      | [BinaryPattern]
+///      | [DeclaredVariablePattern]
 ///      | [CastPattern]
 ///      | [ConstantPattern]
 ///      | [ListPattern]
@@ -3362,7 +3414,6 @@
 ///      | [PostfixPattern]
 ///      | [RecordPattern]
 ///      | [RelationalPattern]
-///      | [VariablePattern]
 @experimental
 abstract class DartPatternImpl extends AstNodeImpl
     implements DartPattern, ListPatternElementImpl {
@@ -3377,7 +3428,7 @@
   DartPattern get unParenthesized => this;
 
   /// The variable pattern, itself, or wrapped in a unary pattern.
-  VariablePatternImpl? get variablePattern => null;
+  DeclaredVariablePatternImpl? get variablePattern => null;
 
   DartType computePatternSchema(ResolverVisitor resolverVisitor);
 
@@ -3493,6 +3544,103 @@
   bool inDeclarationContext() => true;
 }
 
+/// A variable pattern.
+///
+///    variablePattern ::=
+///        ( 'var' | 'final' | 'final'? [TypeAnnotation])? [Identifier]
+@experimental
+class DeclaredVariablePatternImpl extends DartPatternImpl
+    implements DeclaredVariablePattern {
+  @override
+  VariablePatternBindElementImpl? declaredElement;
+
+  @override
+  final Token? keyword;
+
+  @override
+  final Token name;
+
+  @override
+  final TypeAnnotationImpl? type;
+
+  DeclaredVariablePatternImpl({
+    required this.name,
+    required this.keyword,
+    required this.type,
+  }) {
+    _becomeParentOf(type);
+  }
+
+  @override
+  Token get beginToken => type?.beginToken ?? name;
+
+  @override
+  Token get endToken => name;
+
+  /// If [keyword] is `final`, returns it.
+  Token? get finalToken {
+    final keyword = this.keyword;
+    if (keyword != null && keyword.keyword == Keyword.FINAL) {
+      return keyword;
+    }
+    return null;
+  }
+
+  /// Returns the context for this pattern.
+  /// * Declaration context: [PatternVariableDeclarationImpl]
+  /// * Assignment context: [PatternAssignmentImpl]
+  /// * Matching context: [GuardedPatternImpl]
+  AstNodeImpl? get patternContext {
+    for (DartPatternImpl current = this;;) {
+      final parent = current.parent;
+      if (parent is PatternVariableDeclarationImpl) {
+        return parent;
+      } else if (parent is PatternAssignmentImpl) {
+        return parent;
+      } else if (parent is GuardedPatternImpl) {
+        return parent;
+      } else if (parent is DartPatternImpl) {
+        current = parent;
+      } else {
+        return null;
+      }
+    }
+  }
+
+  @override
+  DeclaredVariablePatternImpl? get variablePattern => this;
+
+  @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('keyword', keyword)
+    ..addNode('type', type)
+    ..addToken('name', name);
+
+  @override
+  E? accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitDeclaredVariablePattern(this);
+
+  @override
+  DartType computePatternSchema(ResolverVisitor resolverVisitor) {
+    return resolverVisitor.analyzeVariablePatternSchema(type?.typeOrThrow);
+  }
+
+  @override
+  void resolvePattern(
+    ResolverVisitor resolverVisitor,
+    DartType matchedType,
+    SharedMatchContext context,
+  ) {
+    resolverVisitor.analyzeVariablePattern(matchedType, context, this,
+        declaredElement, declaredElement?.name, type?.typeOrThrow);
+  }
+
+  @override
+  void visitChildren(AstVisitor visitor) {
+    type?.accept(visitor);
+  }
+}
+
 /// A formal parameter with a default value. There are two kinds of parameters
 /// that are both represented by this class: named formal parameters and
 /// positional formal parameters.
@@ -9726,7 +9874,7 @@
   }
 
   @override
-  VariablePatternImpl? get variablePattern => pattern.variablePattern;
+  DeclaredVariablePatternImpl? get variablePattern => pattern.variablePattern;
 
   @override
   ChildEntities get _childEntities => super._childEntities
@@ -10171,7 +10319,7 @@
   Token get endToken => operator;
 
   @override
-  VariablePatternImpl? get variablePattern => operand.variablePattern;
+  DeclaredVariablePatternImpl? get variablePattern => operand.variablePattern;
 
   @override
   ChildEntities get _childEntities => super._childEntities
@@ -13688,101 +13836,6 @@
   }
 }
 
-/// A variable pattern.
-///
-///    variablePattern ::=
-///        ( 'var' | 'final' | [TypeAnnotation])? [Identifier]
-@experimental
-class VariablePatternImpl extends DartPatternImpl implements VariablePattern {
-  @override
-  VariablePatternBindElementImpl? declaredElement;
-
-  @override
-  final Token? keyword;
-
-  @override
-  final Token name;
-
-  @override
-  final TypeAnnotationImpl? type;
-
-  VariablePatternImpl({
-    required this.name,
-    required this.keyword,
-    required this.type,
-  }) {
-    _becomeParentOf(type);
-  }
-
-  @override
-  Token get beginToken => type?.beginToken ?? name;
-
-  @override
-  Token get endToken => name;
-
-  /// If [keyword] is `final`, returns it.
-  Token? get finalToken {
-    final keyword = this.keyword;
-    if (keyword != null && keyword.keyword == Keyword.FINAL) {
-      return keyword;
-    }
-    return null;
-  }
-
-  /// Returns the context for this pattern.
-  /// * Declaration context: [PatternVariableDeclarationImpl]
-  /// * Assignment context: [PatternAssignmentImpl]
-  /// * Matching context: [GuardedPatternImpl]
-  AstNodeImpl? get patternContext {
-    for (DartPatternImpl current = this;;) {
-      final parent = current.parent;
-      if (parent is PatternVariableDeclarationImpl) {
-        return parent;
-      } else if (parent is PatternAssignmentImpl) {
-        return parent;
-      } else if (parent is GuardedPatternImpl) {
-        return parent;
-      } else if (parent is DartPatternImpl) {
-        current = parent;
-      } else {
-        return null;
-      }
-    }
-  }
-
-  @override
-  VariablePatternImpl? get variablePattern => this;
-
-  @override
-  ChildEntities get _childEntities => super._childEntities
-    ..addToken('keyword', keyword)
-    ..addNode('type', type)
-    ..addToken('name', name);
-
-  @override
-  E? accept<E>(AstVisitor<E> visitor) => visitor.visitVariablePattern(this);
-
-  @override
-  DartType computePatternSchema(ResolverVisitor resolverVisitor) {
-    return resolverVisitor.analyzeVariablePatternSchema(type?.typeOrThrow);
-  }
-
-  @override
-  void resolvePattern(
-    ResolverVisitor resolverVisitor,
-    DartType matchedType,
-    SharedMatchContext context,
-  ) {
-    resolverVisitor.analyzeVariablePattern(matchedType, context, this,
-        declaredElement, declaredElement?.name, type?.typeOrThrow);
-  }
-
-  @override
-  void visitChildren(AstVisitor visitor) {
-    type?.accept(visitor);
-  }
-}
-
 /// A guard in a pattern-based `case` in a `switch` statement or `switch`
 /// expression.
 ///
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 6fb2c98..2115b6f 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -69,6 +69,11 @@
   }
 
   @override
+  void visitAssignedVariablePattern(AssignedVariablePattern node) {
+    sink.write(node.name.lexeme);
+  }
+
+  @override
   void visitAssignmentExpression(AssignmentExpression node) {
     _visitNode(node.leftHandSide);
     sink.write(' ');
@@ -313,6 +318,13 @@
   }
 
   @override
+  void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
+    _visitToken(node.keyword, suffix: ' ');
+    _visitNode(node.type, suffix: ' ');
+    sink.write(node.name.lexeme);
+  }
+
+  @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
     _visitNode(node.parameter);
     var separator = node.separator;
@@ -1342,13 +1354,6 @@
   }
 
   @override
-  void visitVariablePattern(VariablePattern node) {
-    _visitToken(node.keyword, suffix: ' ');
-    _visitNode(node.type, suffix: ' ');
-    sink.write(node.name.lexeme);
-  }
-
-  @override
   void visitWhenClause(WhenClause node) {
     sink.write('when ');
     _visitNode(node.expression);
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index cce60df..3f8aa9b 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -152,6 +152,12 @@
   }
 
   @override
+  bool visitAssignedVariablePattern(AssignedVariablePattern node) {
+    var other = _other as DeclaredVariablePattern;
+    return isEqualTokens(node.name, other.name);
+  }
+
+  @override
   bool visitAssignmentExpression(AssignmentExpression node) {
     AssignmentExpression other = _other as AssignmentExpression;
     return isEqualNodes(node.leftHandSide, other.leftHandSide) &&
@@ -421,6 +427,14 @@
   }
 
   @override
+  bool visitDeclaredVariablePattern(DeclaredVariablePattern node) {
+    var other = _other as DeclaredVariablePattern;
+    return isEqualTokens(node.keyword, other.keyword) &&
+        isEqualNodes(node.type, other.type) &&
+        isEqualTokens(node.name, other.name);
+  }
+
+  @override
   bool visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
     var other = _other as DefaultFormalParameterImpl;
     return isEqualNodes(node.parameter, other.parameter) &&
@@ -1518,13 +1532,6 @@
   }
 
   @override
-  bool visitVariablePattern(VariablePattern node) {
-    var other = _other as VariablePattern;
-    return isEqualNodes(node.type, other.type) &&
-        isEqualTokens(node.name, other.name);
-  }
-
-  @override
   bool visitWhenClause(WhenClause node) {
     var other = _other as WhenClause;
     return isEqualTokens(node.whenKeyword, other.whenKeyword) &&
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 9ce7eca..653df32 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -6548,7 +6548,7 @@
 
 class VariablePatternBindElementImpl extends VariablePatternElementImpl
     implements VariablePatternBindElement {
-  final VariablePatternImpl node;
+  final DeclaredVariablePatternImpl node;
 
   VariablePatternBindElementImpl(this.node, super.name, super.offset);
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 3009047..74d499f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -381,6 +381,42 @@
   }
 
   @override
+  void visitDeclaredVariablePattern(
+      covariant DeclaredVariablePatternImpl node) {
+    node.type?.accept(this);
+
+    final name = node.name.lexeme;
+    if (name != '_') {
+      var element = VariablePatternBindElementImpl(
+        node,
+        name,
+        node.name.offset,
+      );
+      _patternVariables.add(name, element);
+      _elementHolder.enclose(element);
+      _define(element);
+      element.hasImplicitType = node.type == null;
+      element.type = node.type?.type ?? _dynamicType;
+      node.declaredElement = element;
+
+      var patternContext = node.patternContext;
+      if (patternContext is PatternVariableDeclarationImpl) {
+        element.isFinal = patternContext.finalToken != null;
+        var keyword = node.keyword;
+        if (keyword != null) {
+          _errorReporter.reportErrorForToken(
+            CompileTimeErrorCode
+                .VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT,
+            keyword,
+          );
+        }
+      } else {
+        element.isFinal = node.finalToken != null;
+      }
+    }
+  }
+
+  @override
   void visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
     var normalParameter = node.parameter;
     var nameToken = normalParameter.name;
@@ -1268,41 +1304,6 @@
     }
   }
 
-  @override
-  void visitVariablePattern(covariant VariablePatternImpl node) {
-    node.type?.accept(this);
-
-    final name = node.name.lexeme;
-    if (name != '_') {
-      var element = VariablePatternBindElementImpl(
-        node,
-        name,
-        node.name.offset,
-      );
-      _patternVariables.add(name, element);
-      _elementHolder.enclose(element);
-      _define(element);
-      element.hasImplicitType = node.type == null;
-      element.type = node.type?.type ?? _dynamicType;
-      node.declaredElement = element;
-
-      var patternContext = node.patternContext;
-      if (patternContext is PatternVariableDeclarationImpl) {
-        element.isFinal = patternContext.finalToken != null;
-        var keyword = node.keyword;
-        if (keyword != null) {
-          _errorReporter.reportErrorForToken(
-            CompileTimeErrorCode
-                .VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT,
-            keyword,
-          );
-        }
-      } else {
-        element.isFinal = node.finalToken != null;
-      }
-    }
-  }
-
   /// Builds the label elements associated with [labels] and stores them in the
   /// element holder.
   void _buildLabelElements(
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
index 0d3090d..9540e53 100644
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ b/pkg/analyzer/lib/src/error/codes.g.dart
@@ -4127,6 +4127,15 @@
     hasPublishedDocs: true,
   );
 
+  ///  Parameters:
+  ///  0: the name of the supertype being extended, implemented, or mixed in
+  static const CompileTimeErrorCode SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY =
+      CompileTimeErrorCode(
+    'SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY',
+    "The sealed class '{0}' can't be extended, implemented, or mixed in "
+        "outside of its library.",
+  );
+
   ///  No parameters.
   static const CompileTimeErrorCode SET_ELEMENT_FROM_DEFERRED_LIBRARY =
       CompileTimeErrorCode(
diff --git a/pkg/analyzer/lib/src/error/error_code_values.g.dart b/pkg/analyzer/lib/src/error/error_code_values.g.dart
index 3078bef..c82fd4c 100644
--- a/pkg/analyzer/lib/src/error/error_code_values.g.dart
+++ b/pkg/analyzer/lib/src/error/error_code_values.g.dart
@@ -414,6 +414,7 @@
   CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION,
   CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD,
   CompileTimeErrorCode.RETURN_WITHOUT_VALUE,
+  CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY,
   CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY,
   CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
   CompileTimeErrorCode.SHARED_DEFERRED_PREFIX,
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 22e2295..9fb931b 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -5274,14 +5274,22 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
+    // TODO(paulberry, scheglov): use inAssignmentPattern
     debugEvent('VariablePattern');
     if (!_featureSet.isEnabled(Feature.patterns)) {
       // TODO(paulberry): report the appropriate error
       throw UnimplementedError('Patterns not enabled');
     }
     var type = pop() as TypeAnnotationImpl?;
-    push(VariablePatternImpl(keyword: keyword, type: type, name: variable));
+    push(
+      DeclaredVariablePatternImpl(
+        keyword: keyword,
+        type: type,
+        name: variable,
+      ),
+    );
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index f7bccc3..37ece5f 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1405,6 +1405,8 @@
       _checkMixinsSuperClass(withClause);
       _checkForMixinWithConflictingPrivateMember(withClause, superclass);
       _checkForConflictingGenerics(node);
+      _checkForSealedSupertypeOutsideOfLibrary(
+          node, superclass, withClause, implementsClause);
       if (node is ClassDeclaration) {
         _checkForNoDefaultSuperConstructorImplicit(node);
       }
@@ -4204,6 +4206,49 @@
         CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR, body);
   }
 
+  /// Check that if a direct supertype of a node is sealed, then it must be in
+  /// the same library.
+  ///
+  /// See [CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY].
+  void _checkForSealedSupertypeOutsideOfLibrary(
+      NamedCompilationUnitMember node,
+      NamedType? superclass,
+      WithClause? withClause,
+      ImplementsClause? implementsClause) {
+    // TODO (kallentu): Distinguish between mixins and classes and make a
+    // separate error for both.
+    void reportSealedClassOutsideOfLibraryError(ClassElementImpl superclass) {
+      if (superclass.isSealed && superclass.library != _currentLibrary) {
+        errorReporter.reportErrorForNode(
+            CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY,
+            node,
+            [superclass.name]);
+      }
+    }
+
+    if (superclass != null) {
+      final superclassType = superclass.type;
+      if (superclassType is InterfaceType) {
+        final superclassElement = superclassType.element;
+        if (superclassElement is ClassElementImpl) {
+          reportSealedClassOutsideOfLibraryError(superclassElement);
+        }
+      }
+    }
+    // TODO (kallentu): Report errors for the [withClause].
+    if (implementsClause != null) {
+      for (NamedType interface in implementsClause.interfaces) {
+        final interfaceType = interface.type;
+        if (interfaceType is InterfaceType) {
+          final interfaceElement = interfaceType.element;
+          if (interfaceElement is ClassElementImpl) {
+            reportSealedClassOutsideOfLibraryError(interfaceElement);
+          }
+        }
+      }
+    }
+  }
+
   /// Verify that the elements in the given set [literal] are subtypes of the
   /// set's static type.
   ///
@@ -4980,6 +5025,8 @@
         CompileTimeErrorCode.IMPLEMENTS_REPEATED,
       );
       _checkForConflictingGenerics(node);
+      _checkForSealedSupertypeOutsideOfLibrary(
+          node, null, null, implementsClause);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index e75558f..23a6781 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1179,7 +1179,7 @@
   }
 
   @override
-  bool isVariablePattern(AstNode pattern) => pattern is VariablePattern;
+  bool isVariablePattern(AstNode pattern) => pattern is DeclaredVariablePattern;
 
   @override
   DartType listType(DartType elementType) {
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index cb21af4..4d118f6 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -60,6 +60,12 @@
   }
 
   @override
+  void visitAssignedVariablePattern(AssignedVariablePattern node) {
+    _runSubscriptions(node, registry._forAssignedVariablePattern);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitAssignmentExpression(AssignmentExpression node) {
     _runSubscriptions(node, registry._forAssignmentExpression);
     node.visitChildren(this);
@@ -234,6 +240,12 @@
   }
 
   @override
+  void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
+    _runSubscriptions(node, registry._forDeclaredVariablePattern);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
     _runSubscriptions(node, registry._forDefaultFormalParameter);
     node.visitChildren(this);
@@ -971,12 +983,6 @@
   }
 
   @override
-  void visitVariablePattern(VariablePattern node) {
-    _runSubscriptions(node, registry._forVariablePattern);
-    node.visitChildren(this);
-  }
-
-  @override
   void visitWhenClause(WhenClause node) {
     _runSubscriptions(node, registry._forWhenClause);
     node.visitChildren(this);
@@ -1028,6 +1034,8 @@
   final List<_Subscription<AsExpression>> _forAsExpression = [];
   final List<_Subscription<AssertInitializer>> _forAssertInitializer = [];
   final List<_Subscription<AssertStatement>> _forAssertStatement = [];
+  final List<_Subscription<AssignedVariablePattern>>
+      _forAssignedVariablePattern = [];
   final List<_Subscription<AssignmentExpression>> _forAssignmentExpression = [];
   final List<_Subscription<AugmentationImportDirective>>
       _forAugmentationImportDirective = [];
@@ -1061,6 +1069,8 @@
   final List<_Subscription<ConstructorSelector>> _forConstructorSelector = [];
   final List<_Subscription<ContinueStatement>> _forContinueStatement = [];
   final List<_Subscription<DeclaredIdentifier>> _forDeclaredIdentifier = [];
+  final List<_Subscription<DeclaredVariablePattern>>
+      _forDeclaredVariablePattern = [];
   final List<_Subscription<DefaultFormalParameter>> _forDefaultFormalParameter =
       [];
   final List<_Subscription<DoStatement>> _forDoStatement = [];
@@ -1212,7 +1222,6 @@
       _forVariableDeclarationList = [];
   final List<_Subscription<VariableDeclarationStatement>>
       _forVariableDeclarationStatement = [];
-  final List<_Subscription<VariablePattern>> _forVariablePattern = [];
   final List<_Subscription<WhenClause>> _forWhenClause = [];
   final List<_Subscription<WhileStatement>> _forWhileStatement = [];
   final List<_Subscription<WithClause>> _forWithClause = [];
@@ -1245,6 +1254,11 @@
     _forAssertStatement.add(_Subscription(linter, visitor, _getTimer(linter)));
   }
 
+  void addAssignedVariablePattern(LintRule linter, AstVisitor visitor) {
+    _forAssignedVariablePattern
+        .add(_Subscription(linter, visitor, _getTimer(linter)));
+  }
+
   void addAssignmentExpression(LintRule linter, AstVisitor visitor) {
     _forAssignmentExpression
         .add(_Subscription(linter, visitor, _getTimer(linter)));
@@ -1373,6 +1387,11 @@
         .add(_Subscription(linter, visitor, _getTimer(linter)));
   }
 
+  void addDeclaredVariablePattern(LintRule linter, AstVisitor visitor) {
+    _forDeclaredVariablePattern
+        .add(_Subscription(linter, visitor, _getTimer(linter)));
+  }
+
   void addDefaultFormalParameter(LintRule linter, AstVisitor visitor) {
     _forDefaultFormalParameter
         .add(_Subscription(linter, visitor, _getTimer(linter)));
@@ -1914,10 +1933,6 @@
         .add(_Subscription(linter, visitor, _getTimer(linter)));
   }
 
-  void addVariablePattern(LintRule linter, AstVisitor visitor) {
-    _forVariablePattern.add(_Subscription(linter, visitor, _getTimer(linter)));
-  }
-
   void addWhenClause(LintRule linter, AstVisitor visitor) {
     _forWhenClause.add(_Subscription(linter, visitor, _getTimer(linter)));
   }
diff --git a/pkg/analyzer/lib/src/services/top_level_declarations.dart b/pkg/analyzer/lib/src/services/top_level_declarations.dart
index 0b9e97d..aa6a420 100644
--- a/pkg/analyzer/lib/src/services/top_level_declarations.dart
+++ b/pkg/analyzer/lib/src/services/top_level_declarations.dart
@@ -21,7 +21,12 @@
 
   /// Return the first public library that that exports (but does not necessary
   /// declare) [element].
-  Future<LibraryElement?> publiclyExporting(Element element) async {
+  Future<LibraryElement?> publiclyExporting(Element element,
+      {Map<Element, LibraryElement?>? resultCache}) async {
+    if (resultCache?.containsKey(element) ?? false) {
+      return resultCache![element];
+    }
+
     var declarationFilePath = element.source?.fullName;
     if (declarationFilePath == null) {
       return null;
@@ -48,6 +53,7 @@
       }
 
       if (_findElement(elementResult.element, element.displayName) != null) {
+        resultCache?[element] = elementResult.element;
         return elementResult.element;
       }
     }
diff --git a/pkg/analyzer/lib/src/summary/api_signature.dart b/pkg/analyzer/lib/src/summary/api_signature.dart
index 69bf451..e5022fd 100644
--- a/pkg/analyzer/lib/src/summary/api_signature.dart
+++ b/pkg/analyzer/lib/src/summary/api_signature.dart
@@ -101,6 +101,14 @@
     addBytes(bytes);
   }
 
+  /// Collect a string list, with the length.
+  void addStringList(List<String> values) {
+    addInt(values.length);
+    for (var value in values) {
+      addString(value);
+    }
+  }
+
   /// Collect the given [Uint32List].
   void addUint32List(Uint32List data) {
     addBytes(data.buffer.asUint8List());
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index f6bc15b..633824f 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -1634,19 +1634,16 @@
 
     if (memberFlags == Tag.MemberLegacyWithTypeArguments ||
         memberFlags == Tag.MemberWithTypeArguments) {
-      var arguments = _readTypeList();
-      // TODO(scheglov) why to check for empty? If we have this flags.
-      if (arguments.isNotEmpty) {
-        var typeParameters =
-            (element.enclosingElement as TypeParameterizedElement)
-                .typeParameters;
-        var substitution = Substitution.fromPairs(typeParameters, arguments);
-        element =
-            ExecutableMember.from2(element as ExecutableElement, substitution);
-      }
+      element as ExecutableElement;
+      var enclosing = element.enclosingElement as TypeParameterizedElement;
+      var typeParameters = enclosing.typeParameters;
+      var typeArguments = _readTypeList();
+      var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+      element = ExecutableMember.from2(element, substitution);
     }
 
-    if (memberFlags == Tag.MemberLegacyWithTypeArguments) {
+    if (memberFlags == Tag.MemberLegacyWithoutTypeArguments ||
+        memberFlags == Tag.MemberLegacyWithTypeArguments) {
       return Member.legacy(element);
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 3399cf0..89760a2 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -598,14 +598,20 @@
         element.substitution.map,
       );
 
-      writeByte(
-        isLegacy
-            ? Tag.MemberLegacyWithTypeArguments
-            : Tag.MemberWithTypeArguments,
-      );
-
-      _writeElement(declaration);
-      _writeTypeList(typeArguments);
+      if (isLegacy) {
+        if (typeArguments.isEmpty) {
+          writeByte(Tag.MemberLegacyWithoutTypeArguments);
+          _writeElement(declaration);
+        } else {
+          writeByte(Tag.MemberLegacyWithTypeArguments);
+          _writeElement(declaration);
+          _writeTypeList(typeArguments);
+        }
+      } else {
+        writeByte(Tag.MemberWithTypeArguments);
+        _writeElement(declaration);
+        _writeTypeList(typeArguments);
+      }
     } else {
       writeByte(Tag.RawElement);
       _writeElement(element);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index fc92973..7b00a9c 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -91,7 +91,10 @@
     var element = ClassElementImpl(name, nameToken.offset);
     element.isAbstract = node.abstractKeyword != null;
     element.isMacro = node.macroKeyword != null;
-    element.isSealed = node.sealedKeyword != null;
+    if (node.sealedKeyword != null) {
+      element.isSealed = true;
+      element.isAbstract = true;
+    }
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
@@ -125,7 +128,10 @@
     var element = ClassElementImpl(name, nameToken.offset);
     element.isAbstract = node.abstractKeyword != null;
     element.isMacro = node.macroKeyword != null;
-    element.isSealed = node.sealedKeyword != null;
+    if (node.sealedKeyword != null) {
+      element.isSealed = true;
+      element.isAbstract = true;
+    }
     element.isMixinApplication = true;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 478cd3a..8d5337c 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -216,6 +216,10 @@
     return _node(search, (n) => n is DeclaredIdentifier);
   }
 
+  DeclaredVariablePattern declaredVariablePattern(String search) {
+    return _node(search, (n) => n is DeclaredVariablePattern);
+  }
+
   DefaultFormalParameter defaultParameter(String search) {
     return _node(search, (n) => n is DefaultFormalParameter);
   }
@@ -732,10 +736,6 @@
     return _node(search, (n) => n is VariableDeclarationStatement);
   }
 
-  VariablePattern variablePattern(String search) {
-    return _node(search, (n) => n is VariablePattern);
-  }
-
   WhenClause whenClause(String search) {
     return _node(search, (n) => n is WhenClause);
   }
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 60ffd6e..14c4cdd 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -12557,6 +12557,11 @@
         return 0;
       }
       ```
+  SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
+    problemMessage: "The sealed class '{0}' can't be extended, implemented, or mixed in outside of its library."
+    comment: |-
+      Parameters:
+      0: the name of the supertype being extended, implemented, or mixed in
   SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
     problemMessage: "The element type '{0}' can't be assigned to the set type '{1}'."
     hasPublishedDocs: true
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 0ca3492..664232f 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 5.2.0
+version: 5.3.1
 description: This package provides a library that performs static analysis of Dart code.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
 
@@ -7,8 +7,8 @@
   sdk: '>=2.17.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^50.0.0
-  collection: ^1.15.0
+  _fe_analyzer_shared: ^51.0.0
+  collection: ^1.17.0
   convert: ^3.0.0
   crypto: ^3.0.0
   glob: ^2.0.0
diff --git a/pkg/analyzer/test/generated/patterns_parser_test.dart b/pkg/analyzer/test/generated/patterns_parser_test.dart
index 9512a99..59d9386 100644
--- a/pkg/analyzer/test/generated/patterns_parser_test.dart
+++ b/pkg/analyzer/test/generated/patterns_parser_test.dart
@@ -578,7 +578,7 @@
   caseKeyword: case
   guardedPattern: GuardedPattern
     pattern: CastPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
       asToken: as
@@ -627,7 +627,7 @@
     assertParsedNodeText(node, r'''
 BinaryPattern
   leftOperand: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -639,7 +639,7 @@
         token: double
       question: ?
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: Object
@@ -660,7 +660,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -668,7 +668,7 @@
     name: _
   operator: &&
   rightOperand: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
@@ -695,7 +695,7 @@
     assertParsedNodeText(node, r'''
 BinaryPattern
   leftOperand: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -707,7 +707,7 @@
         token: double
       question: ?
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: Object
@@ -728,7 +728,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -736,7 +736,7 @@
     name: _
   operator: ||
   rightOperand: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
@@ -840,7 +840,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: CastPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: var
           name: f
         asToken: as
@@ -928,7 +928,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: CastPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: var
           name: n
         asToken: as
@@ -2965,7 +2965,7 @@
   caseClause: CaseClause
     caseKeyword: case
     guardedPattern: GuardedPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: _
       whenClause: WhenClause
         whenKeyword: when
@@ -3003,7 +3003,7 @@
   caseClause: CaseClause
     caseKeyword: case
     guardedPattern: GuardedPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: _
       whenClause: WhenClause
         whenKeyword: when
@@ -3158,7 +3158,7 @@
     assertParsedNodeText(node, r'''
 SwitchExpressionCase
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
     whenClause: WhenClause
       whenKeyword: when
@@ -3184,7 +3184,7 @@
     assertParsedNodeText(node, r'''
 SwitchExpressionCase
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
   arrow: =>
   expression: FunctionExpression
@@ -3235,7 +3235,7 @@
 SwitchPatternCase
   keyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
     whenClause: WhenClause
       whenKeyword: when
@@ -3270,7 +3270,7 @@
     pattern: ListPattern
       leftBracket: [
       elements
-        VariablePattern
+        DeclaredVariablePattern
           name: _
       rightBracket: ]
     whenClause: WhenClause
@@ -3299,7 +3299,7 @@
           key: SimpleStringLiteral
             literal: 'x'
           separator: :
-          value: VariablePattern
+          value: DeclaredVariablePattern
             name: _
       rightBracket: }
     whenClause: WhenClause
@@ -3331,7 +3331,7 @@
           fieldName: RecordPatternFieldName
             name: bar
             colon: :
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: _
       rightParenthesis: )
     whenClause: WhenClause
@@ -3355,7 +3355,7 @@
   guardedPattern: GuardedPattern
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: _
       rightParenthesis: )
     whenClause: WhenClause
@@ -3377,7 +3377,7 @@
     assertParsedNodeText(node, r'''
 SwitchExpressionCase
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
     whenClause: WhenClause
       whenKeyword: when
@@ -3408,7 +3408,7 @@
     assertParsedNodeText(node, r'''
 SwitchExpressionCase
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
     whenClause: WhenClause
       whenKeyword: when
@@ -3443,7 +3443,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
         whenClause: WhenClause
           whenKeyword: when
@@ -3493,7 +3493,7 @@
         literal: 0
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -3520,9 +3520,9 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       name: a
-    VariablePattern
+    DeclaredVariablePattern
       name: b
   rightBracket: ]
 ''');
@@ -3567,9 +3567,9 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       name: a
-    VariablePattern
+    DeclaredVariablePattern
       name: b
   rightBracket: ]
 ''');
@@ -3708,9 +3708,9 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       name: a
-    VariablePattern
+    DeclaredVariablePattern
       name: b
   rightBracket: ]
 ''');
@@ -3755,9 +3755,9 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       name: a
-    VariablePattern
+    DeclaredVariablePattern
       name: b
   rightBracket: ]
 ''');
@@ -4291,14 +4291,14 @@
   caseKeyword: case
   guardedPattern: GuardedPattern
     pattern: BinaryPattern
-      leftOperand: VariablePattern
+      leftOperand: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
           question: ?
         name: _
       operator: &&
-      rightOperand: VariablePattern
+      rightOperand: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: double
@@ -4320,21 +4320,21 @@
     assertParsedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
         question: ?
       name: _
     operator: &&
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
         question: ?
       name: _
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: Object
@@ -4356,21 +4356,21 @@
     assertParsedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
         question: ?
       name: _
     operator: &&
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
         question: ?
       name: _
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: Object
@@ -4391,7 +4391,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -4399,14 +4399,14 @@
     name: _
   operator: ||
   rightOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
         question: ?
       name: _
     operator: &&
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: Object
@@ -4427,14 +4427,14 @@
   caseKeyword: case
   guardedPattern: GuardedPattern
     pattern: BinaryPattern
-      leftOperand: VariablePattern
+      leftOperand: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
           question: ?
         name: _
       operator: ||
-      rightOperand: VariablePattern
+      rightOperand: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: double
@@ -4456,21 +4456,21 @@
     assertParsedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
         question: ?
       name: _
     operator: ||
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: double
         question: ?
       name: _
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: Object
@@ -4504,13 +4504,13 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: a
     MapPatternEntry
       key: SimpleStringLiteral
         literal: 'b'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: b
   rightBracket: }
 ''');
@@ -4565,13 +4565,13 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: a
     MapPatternEntry
       key: SimpleStringLiteral
         literal: 'b'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: b
   rightBracket: }
 ''');
@@ -4592,13 +4592,13 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: a
     MapPatternEntry
       key: SimpleStringLiteral
         literal: 'b'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: b
   rightBracket: }
 ''');
@@ -4750,13 +4750,13 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: a
     MapPatternEntry
       key: SimpleStringLiteral
         literal: 'b'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: b
   rightBracket: }
 ''');
@@ -4791,13 +4791,13 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: a
     MapPatternEntry
       key: SimpleStringLiteral
         literal: 'b'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         name: b
   rightBracket: }
 ''');
@@ -4889,7 +4889,7 @@
   caseKeyword: case
   guardedPattern: GuardedPattern
     pattern: PostfixPattern
-      operand: VariablePattern
+      operand: DeclaredVariablePattern
         keyword: var
         name: y
       operator: !
@@ -5099,7 +5099,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: f
         operator: !
@@ -5178,7 +5178,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: n
         operator: !
@@ -5250,7 +5250,7 @@
   caseKeyword: case
   guardedPattern: GuardedPattern
     pattern: PostfixPattern
-      operand: VariablePattern
+      operand: DeclaredVariablePattern
         keyword: var
         name: y
       operator: ?
@@ -5460,7 +5460,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: f
         operator: ?
@@ -5539,7 +5539,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: n
         operator: ?
@@ -6160,7 +6160,7 @@
     assertParsedNodeText(node, r'''
 ParenthesizedPattern
   leftParenthesis: (
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     name: a
   rightParenthesis: )
 ''');
@@ -6221,7 +6221,7 @@
     assertParsedNodeText(node, r'''
 ParenthesizedPattern
   leftParenthesis: (
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     name: a
   rightParenthesis: )
 ''');
@@ -6286,10 +6286,10 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: b
       rightParenthesis: )
     inKeyword: in
@@ -6321,10 +6321,10 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: b
       rightParenthesis: )
     inKeyword: in
@@ -6353,10 +6353,10 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: b
       rightParenthesis: )
     inKeyword: in
@@ -6391,10 +6391,10 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: b
       rightParenthesis: )
     inKeyword: in
@@ -6423,10 +6423,10 @@
         leftParenthesis: (
         fields
           RecordPatternField
-            pattern: VariablePattern
+            pattern: DeclaredVariablePattern
               name: a
           RecordPatternField
-            pattern: VariablePattern
+            pattern: DeclaredVariablePattern
               name: b
         rightParenthesis: )
       equals: =
@@ -6458,10 +6458,10 @@
         leftParenthesis: (
         fields
           RecordPatternField
-            pattern: VariablePattern
+            pattern: DeclaredVariablePattern
               name: a
           RecordPatternField
-            pattern: VariablePattern
+            pattern: DeclaredVariablePattern
               name: b
         rightParenthesis: )
       equals: =
@@ -6513,7 +6513,7 @@
           fieldName: RecordPatternFieldName
             name: f
             colon: :
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6537,7 +6537,7 @@
     pattern: ListPattern
       leftBracket: [
       elements
-        VariablePattern
+        DeclaredVariablePattern
           name: a
       rightBracket: ]
     equals: =
@@ -6565,7 +6565,7 @@
           key: SimpleStringLiteral
             literal: 'a'
           separator: :
-          value: VariablePattern
+          value: DeclaredVariablePattern
             name: a
       rightBracket: }
     equals: =
@@ -6588,7 +6588,7 @@
     keyword: final
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
       rightParenthesis: )
     equals: =
@@ -6613,7 +6613,7 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6644,7 +6644,7 @@
           fieldName: RecordPatternFieldName
             name: f
             colon: :
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6668,7 +6668,7 @@
     pattern: ListPattern
       leftBracket: [
       elements
-        VariablePattern
+        DeclaredVariablePattern
           name: a
       rightBracket: ]
     equals: =
@@ -6696,7 +6696,7 @@
           key: SimpleStringLiteral
             literal: 'a'
           separator: :
-          value: VariablePattern
+          value: DeclaredVariablePattern
             name: a
       rightBracket: }
     equals: =
@@ -6719,7 +6719,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
       rightParenthesis: )
     equals: =
@@ -6744,7 +6744,7 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6781,7 +6781,7 @@
           fieldName: RecordPatternFieldName
             name: f
             colon: :
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6811,7 +6811,7 @@
     pattern: ListPattern
       leftBracket: [
       elements
-        VariablePattern
+        DeclaredVariablePattern
           name: a
       rightBracket: ]
     equals: =
@@ -6845,7 +6845,7 @@
           key: SimpleStringLiteral
             literal: 'a'
           separator: :
-          value: VariablePattern
+          value: DeclaredVariablePattern
             name: a
       rightBracket: }
     equals: =
@@ -6874,7 +6874,7 @@
     keyword: final
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
       rightParenthesis: )
     equals: =
@@ -6905,7 +6905,7 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6942,7 +6942,7 @@
           fieldName: RecordPatternFieldName
             name: f
             colon: :
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -6972,7 +6972,7 @@
     pattern: ListPattern
       leftBracket: [
       elements
-        VariablePattern
+        DeclaredVariablePattern
           name: a
       rightBracket: ]
     equals: =
@@ -7006,7 +7006,7 @@
           key: SimpleStringLiteral
             literal: 'a'
           separator: :
-          value: VariablePattern
+          value: DeclaredVariablePattern
             name: a
       rightBracket: }
     equals: =
@@ -7035,7 +7035,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
       rightParenthesis: )
     equals: =
@@ -7066,7 +7066,7 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
       rightParenthesis: )
     equals: =
@@ -7102,7 +7102,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
   rightParenthesis: )
 ''');
@@ -7120,10 +7120,10 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: b
   rightParenthesis: )
 ''');
@@ -7251,7 +7251,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
   rightParenthesis: )
 ''');
@@ -7269,10 +7269,10 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: b
   rightParenthesis: )
 ''');
@@ -7836,7 +7836,7 @@
   elements
     RestPatternElement
       operator: ...
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
   rightBracket: ]
@@ -7862,7 +7862,7 @@
   elements
     RestPatternElement
       operator: ...
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
   rightBracket: }
@@ -7889,7 +7889,7 @@
 f(x) => switch(x) {};
 ''');
     var node = findNode.switchExpression('switch');
-    assertParsedNodeText(node, '''
+    assertParsedNodeText(node, r'''
 SwitchExpression
   switchKeyword: switch
   leftParenthesis: (
@@ -7908,7 +7908,7 @@
 };
 ''');
     var node = findNode.switchExpression('switch');
-    assertParsedNodeText(node, '''
+    assertParsedNodeText(node, r'''
 SwitchExpression
   switchKeyword: switch
   leftParenthesis: (
@@ -7919,7 +7919,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
         whenClause: WhenClause
           whenKeyword: when
@@ -7939,7 +7939,7 @@
 };
 ''');
     var node = findNode.switchExpression('switch');
-    assertParsedNodeText(node, '''
+    assertParsedNodeText(node, r'''
 SwitchExpression
   switchKeyword: switch
   leftParenthesis: (
@@ -7950,7 +7950,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -7966,7 +7966,7 @@
 };
 ''');
     var node = findNode.switchExpression('switch');
-    assertParsedNodeText(node, '''
+    assertParsedNodeText(node, r'''
 SwitchExpression
   switchKeyword: switch
   leftParenthesis: (
@@ -7977,7 +7977,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -7994,7 +7994,7 @@
 };
 ''');
     var node = findNode.switchExpression('switch');
-    assertParsedNodeText(node, '''
+    assertParsedNodeText(node, r'''
 SwitchExpression
   switchKeyword: switch
   leftParenthesis: (
@@ -8005,7 +8005,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -8015,7 +8015,7 @@
         literal: 0
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -8035,7 +8035,7 @@
 ParenthesizedPattern
   leftParenthesis: (
   pattern: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: y
     asToken: as
     type: NamedType
@@ -8045,172 +8045,6 @@
 ''');
   }
 
-  test_variable_bare_insideNullAssert() {
-    _parse('''
-void f(x) {
-  var (y!) = x;
-}
-''');
-    var node = findNode.patternVariableDeclaration('= x').pattern;
-    assertParsedNodeText(node, r'''
-ParenthesizedPattern
-  leftParenthesis: (
-  pattern: PostfixPattern
-    operand: VariablePattern
-      name: y
-    operator: !
-  rightParenthesis: )
-''');
-  }
-
-  test_variable_final_typed_insideCase() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final int y:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-VariablePattern
-  keyword: final
-  type: NamedType
-    name: SimpleIdentifier
-      token: int
-  name: y
-''');
-  }
-
-  test_variable_final_typed_insideCast() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final int y as Object:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-CastPattern
-  pattern: VariablePattern
-    keyword: final
-    type: NamedType
-      name: SimpleIdentifier
-        token: int
-    name: y
-  asToken: as
-  type: NamedType
-    name: SimpleIdentifier
-      token: Object
-''');
-  }
-
-  test_variable_final_typed_insideIfCase() {
-    _parse('''
-void f(x) {
-  if (x case final int y) {}
-}
-''');
-    var node = findNode.caseClause('case');
-    assertParsedNodeText(node, r'''
-CaseClause
-  caseKeyword: case
-  guardedPattern: GuardedPattern
-    pattern: VariablePattern
-      keyword: final
-      type: NamedType
-        name: SimpleIdentifier
-          token: int
-      name: y
-''');
-  }
-
-  test_variable_final_typed_insideNullAssert() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final int y!:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-PostfixPattern
-  operand: VariablePattern
-    keyword: final
-    type: NamedType
-      name: SimpleIdentifier
-        token: int
-    name: y
-  operator: !
-''');
-  }
-
-  test_variable_final_typed_insideNullCheck() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final int y?:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-PostfixPattern
-  operand: VariablePattern
-    keyword: final
-    type: NamedType
-      name: SimpleIdentifier
-        token: int
-    name: y
-  operator: ?
-''');
-  }
-
-  test_variable_final_untyped_insideCase() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final y:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-VariablePattern
-  keyword: final
-  name: y
-''');
-  }
-
-  test_variable_final_untyped_insideCast() {
-    _parse('''
-void f(x) {
-  switch (x) {
-    case final y as Object:
-      break;
-  }
-}
-''');
-    var node = findNode.singleGuardedPattern.pattern;
-    assertParsedNodeText(node, r'''
-CastPattern
-  pattern: VariablePattern
-    keyword: final
-    name: y
-  asToken: as
-  type: NamedType
-    name: SimpleIdentifier
-      token: Object
-''');
-  }
-
   test_variable_final_untyped_insideIfCase() {
     _parse('''
 void f(x) {
@@ -8222,7 +8056,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       keyword: final
       name: y
 ''');
@@ -8240,7 +8074,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     name: y
   operator: !
@@ -8259,7 +8093,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     name: y
   operator: ?
@@ -8277,7 +8111,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -8297,7 +8131,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8320,7 +8154,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -8340,7 +8174,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8361,7 +8195,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8383,7 +8217,7 @@
     assertParsedNodeText(node, r'''
 GuardedPattern
   pattern: CastPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: when
@@ -8425,7 +8259,7 @@
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8448,7 +8282,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -8468,7 +8302,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8491,7 +8325,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -8513,7 +8347,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -8534,7 +8368,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8562,7 +8396,7 @@
     expression: IntegerLiteral
       literal: 1
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8582,7 +8416,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8610,7 +8444,7 @@
     expression: IntegerLiteral
       literal: 1
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8636,7 +8470,7 @@
       key: SimpleStringLiteral
         literal: 'a'
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8657,7 +8491,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8678,7 +8512,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8711,7 +8545,7 @@
       fieldName: RecordPatternFieldName
         name: f
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8743,7 +8577,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8765,7 +8599,7 @@
     assertParsedNodeText(node, r'''
 ParenthesizedPattern
   leftParenthesis: (
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8792,7 +8626,7 @@
       fieldName: RecordPatternFieldName
         name: n
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8822,7 +8656,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8850,7 +8684,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -8875,7 +8709,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: _
@@ -8895,7 +8729,7 @@
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8923,7 +8757,7 @@
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8946,7 +8780,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -8966,7 +8800,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -8989,7 +8823,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
 ''');
@@ -9007,7 +8841,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: var
     name: y
   asToken: as
@@ -9028,7 +8862,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       keyword: var
       name: y
 ''');
@@ -9046,7 +8880,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
   operator: !
@@ -9065,7 +8899,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
   operator: ?
@@ -9084,7 +8918,7 @@
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     name: _
   whenClause: WhenClause
     whenKeyword: when
@@ -9104,7 +8938,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   name: _
 ''');
   }
@@ -9121,7 +8955,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     name: _
   asToken: as
   type: NamedType
@@ -9141,7 +8975,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
 ''');
   }
@@ -9158,7 +8992,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     name: _
   operator: !
 ''');
@@ -9176,7 +9010,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     name: _
   operator: ?
 ''');
@@ -9193,7 +9027,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: final
   type: NamedType
     name: SimpleIdentifier
@@ -9214,7 +9048,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     type: NamedType
       name: SimpleIdentifier
@@ -9238,7 +9072,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       keyword: final
       type: NamedType
         name: SimpleIdentifier
@@ -9259,7 +9093,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     type: NamedType
       name: SimpleIdentifier
@@ -9281,7 +9115,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     type: NamedType
       name: SimpleIdentifier
@@ -9302,7 +9136,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: final
   name: _
 ''');
@@ -9320,7 +9154,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: _
   asToken: as
@@ -9341,7 +9175,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       keyword: final
       name: _
 ''');
@@ -9359,7 +9193,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     name: _
   operator: !
@@ -9378,7 +9212,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: final
     name: _
   operator: ?
@@ -9396,7 +9230,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -9416,7 +9250,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -9439,7 +9273,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -9459,7 +9293,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -9480,7 +9314,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -9500,7 +9334,7 @@
 ''');
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: _
 ''');
@@ -9518,7 +9352,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: var
     name: _
   asToken: as
@@ -9539,7 +9373,7 @@
 CaseClause
   caseKeyword: case
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       keyword: var
       name: _
 ''');
@@ -9557,7 +9391,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: _
   operator: !
@@ -9576,7 +9410,7 @@
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: _
   operator: ?
diff --git a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
index 4e29972..f7fe411 100644
--- a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
@@ -364,6 +364,22 @@
 ''');
   }
 
+  test_class_method_body_block_invokesSuperSelf_false_differentName() {
+    _assertSameSignature('''
+class A {
+  void foo() {
+    super.bar();
+  }
+}
+''', '''
+class A {
+  void foo() {
+    super.bar2();
+  }
+}
+''');
+  }
+
   test_class_modifier() {
     _assertNotSameSignature(r'''
 class C {}
@@ -457,18 +473,6 @@
 ''');
   }
 
-  test_classLike_method_body_block_invokesSuperSelf_false_differentName() {
-    _assertSameSignature_classLike(r'''
-void foo() {
-  super.bar();
-}
-''', r'''
-void foo() {
-  super.bar2();
-}
-''');
-  }
-
   test_classLike_method_body_block_invokesSuperSelf_falseToTrue() {
     _assertNotSameSignature_classLike(r'''
 void foo() {}
@@ -1314,6 +1318,116 @@
 ''');
   }
 
+  test_mixin_superInvokedNames_indexRead_add() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super[0] = 0;
+  }
+}
+''', r'''
+mixin M {
+  void foo() {
+    super[0];
+    super[0] = 0;
+  }
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_indexWrite_add() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super[0];
+  }
+}
+''', r'''
+mixin M {
+  void foo() {
+    super[0];
+    super[0] = 0;
+  }
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_methodInvocation_add() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {}
+}
+''', r'''
+mixin M {
+  void foo() {
+    super.bar();
+  }
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_methodInvocation_change() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super.bar();
+  }
+}
+''', r'''
+mixin M {
+  void foo() {
+    super.bar2();
+  }
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_methodInvocation_remove() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super.bar();
+  }
+}
+''', r'''
+mixin M {
+  void foo() {}
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_propertyRead_change() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super.bar;
+  }
+}
+''', r'''
+mixin M {
+  void foo() {
+    super.bar2;
+  }
+}
+''');
+  }
+
+  test_mixin_superInvokedNames_propertyWrite_change() {
+    _assertNotSameSignature(r'''
+mixin M {
+  void foo() {
+    super.bar = 0;
+  }
+}
+''', r'''
+mixin M {
+  void foo() {
+    super.bar2 = 2;
+  }
+}
+''');
+  }
+
   test_topLevelVariable_final_add() {
     _assertNotSameSignature(r'''
 int a = 0;
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index e1f7ed0..3a3dad2 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -3737,7 +3737,7 @@
 ''');
     _assertSource(
       'int? _',
-      findNode.variablePattern('int?'),
+      findNode.declaredVariablePattern('int?'),
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_pattern_test.dart
index 2a859a1..5ec3cf9 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_pattern_test.dart
@@ -23,7 +23,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -32,7 +32,7 @@
       type: int
     name: _
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: double
@@ -55,7 +55,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -64,7 +64,7 @@
       type: int
     name: _
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: double
@@ -89,12 +89,12 @@
     pattern: ParenthesizedPattern
       leftParenthesis: (
       pattern: BinaryPattern
-        leftOperand: VariablePattern
+        leftOperand: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@18
             type: int
         operator: &&
-        rightOperand: VariablePattern
+        rightOperand: DeclaredVariablePattern
           name: b
           declaredElement: hasImplicitType b@23
             type: int
@@ -116,7 +116,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -125,7 +125,7 @@
       type: int
     name: _
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: double
@@ -148,7 +148,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: int
@@ -157,7 +157,7 @@
       type: int
     name: _
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     type: NamedType
       name: SimpleIdentifier
         token: double
diff --git a/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart
index 379c797..496c965 100644
--- a/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart
@@ -23,7 +23,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@29
@@ -79,7 +79,7 @@
   pattern: ParenthesizedPattern
     leftParenthesis: (
     pattern: CastPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@19
           type: int
diff --git a/pkg/analyzer/test/src/dart/resolution/variable_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart
similarity index 91%
rename from pkg/analyzer/test/src/dart/resolution/variable_pattern_test.dart
rename to pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart
index f36cd05f..c48bbf1 100644
--- a/pkg/analyzer/test/src/dart/resolution/variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart
@@ -8,12 +8,12 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(VariablePatternResolutionTest);
+    defineReflectiveTests(DeclaredVariablePatternResolutionTest);
   });
 }
 
 @reflectiveTest
-class VariablePatternResolutionTest extends PubPackageResolutionTest {
+class DeclaredVariablePatternResolutionTest extends PubPackageResolutionTest {
   test_final_switchCase() async {
     await assertNoErrorsInCode(r'''
 void f(int x) {
@@ -25,7 +25,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: final
   name: y
   declaredElement: hasImplicitType isFinal y@46
@@ -44,7 +44,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: final
   type: NamedType
     name: SimpleIdentifier
@@ -69,7 +69,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -93,7 +93,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   type: NamedType
     name: SimpleIdentifier
       token: int
@@ -115,7 +115,7 @@
 
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@54
@@ -137,7 +137,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@95
@@ -153,7 +153,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@33
@@ -169,7 +169,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@36
@@ -185,7 +185,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@34
@@ -207,7 +207,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@95
@@ -226,7 +226,7 @@
 ''');
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
-VariablePattern
+DeclaredVariablePattern
   keyword: var
   name: y
   declaredElement: hasImplicitType y@44
@@ -246,7 +246,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 CastPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@44
diff --git a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
index 7c2f127..a464d64 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
@@ -86,7 +86,7 @@
       pattern: ListPattern
         leftBracket: [
         elements
-          VariablePattern
+          DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -159,7 +159,7 @@
   caseClause: CaseClause
     caseKeyword: case
     guardedPattern: GuardedPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
index a986eef..4bfc8ac 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
@@ -67,7 +67,7 @@
     caseKeyword: case
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
-        leftOperand: VariablePattern
+        leftOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -81,7 +81,7 @@
         rightOperand: ListPattern
           leftBracket: [
           elements
-            VariablePattern
+            DeclaredVariablePattern
               type: NamedType
                 name: SimpleIdentifier
                   token: int
@@ -146,7 +146,7 @@
     caseKeyword: case
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
-        leftOperand: VariablePattern
+        leftOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -160,7 +160,7 @@
         rightOperand: ListPattern
           leftBracket: [
           elements
-            VariablePattern
+            DeclaredVariablePattern
               keyword: final
               type: NamedType
                 name: SimpleIdentifier
@@ -226,7 +226,7 @@
     caseKeyword: case
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
-        leftOperand: VariablePattern
+        leftOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -240,7 +240,7 @@
         rightOperand: ListPattern
           leftBracket: [
           elements
-            VariablePattern
+            DeclaredVariablePattern
               type: NamedType
                 name: SimpleIdentifier
                   token: double
@@ -307,7 +307,7 @@
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
         leftOperand: BinaryPattern
-          leftOperand: VariablePattern
+          leftOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -381,7 +381,7 @@
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
         leftOperand: BinaryPattern
-          leftOperand: VariablePattern
+          leftOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -392,7 +392,7 @@
             declaredElement: a@37
               type: int
           operator: ||
-          rightOperand: VariablePattern
+          rightOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -459,7 +459,7 @@
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
         leftOperand: BinaryPattern
-          leftOperand: VariablePattern
+          leftOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -470,7 +470,7 @@
             declaredElement: a@37
               type: int
           operator: ||
-          rightOperand: VariablePattern
+          rightOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -481,7 +481,7 @@
             declaredElement: a@46
               type: int
         operator: ||
-        rightOperand: VariablePattern
+        rightOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -545,7 +545,7 @@
     guardedPattern: GuardedPattern
       pattern: BinaryPattern
         leftOperand: BinaryPattern
-          leftOperand: VariablePattern
+          leftOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -561,7 +561,7 @@
               literal: 2
               staticType: int
         operator: ||
-        rightOperand: VariablePattern
+        rightOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -631,7 +631,7 @@
               literal: 1
               staticType: int
           operator: ||
-          rightOperand: VariablePattern
+          rightOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -705,7 +705,7 @@
               literal: 1
               staticType: int
           operator: ||
-          rightOperand: VariablePattern
+          rightOperand: DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -716,7 +716,7 @@
             declaredElement: a@42
               type: int
         operator: ||
-        rightOperand: VariablePattern
+        rightOperand: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -791,7 +791,7 @@
       pattern: ListPattern
         leftBracket: [
         elements
-          VariablePattern
+          DeclaredVariablePattern
             type: NamedType
               name: SimpleIdentifier
                 token: int
@@ -875,7 +875,7 @@
   caseClause: CaseClause
     caseKeyword: case
     guardedPattern: GuardedPattern
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart
index f997a45..08953d5 100644
--- a/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart
@@ -28,7 +28,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -57,7 +57,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@41
@@ -91,7 +91,7 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@46
@@ -140,7 +140,7 @@
         staticType: int
     RestPatternElement
       operator: ...
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: rest
         declaredElement: hasImplicitType rest@46
@@ -164,7 +164,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@51
@@ -198,7 +198,7 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@56
@@ -263,7 +263,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -292,7 +292,7 @@
 ListPattern
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@48
@@ -359,7 +359,7 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       type: NamedType
         name: SimpleIdentifier
           token: int
@@ -398,7 +398,7 @@
     rightBracket: >
   leftBracket: [
   elements
-    VariablePattern
+    DeclaredVariablePattern
       keyword: var
       name: a
       declaredElement: hasImplicitType a@53
@@ -421,7 +421,7 @@
   pattern: ListPattern
     leftBracket: [
     elements
-      VariablePattern
+      DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@29
           type: int
@@ -460,7 +460,7 @@
       rightBracket: >
     leftBracket: [
     elements
-      VariablePattern
+      DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@23
           type: int
@@ -497,7 +497,7 @@
   pattern: ListPattern
     leftBracket: [
     elements
-      VariablePattern
+      DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart
index 5b90e01..20aff16 100644
--- a/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart
@@ -34,7 +34,7 @@
         literal: 0
         staticType: int
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: String
@@ -68,7 +68,7 @@
         literal: 0
         staticType: int
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@44
@@ -113,7 +113,7 @@
         literal: 0
         staticType: int
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@57
@@ -173,7 +173,7 @@
           literal: ''
     RestPatternElement
       operator: ...
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: rest
         declaredElement: hasImplicitType rest@57
@@ -199,7 +199,7 @@
         literal: 0
         staticType: int
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@50
@@ -241,7 +241,7 @@
         literal: true
         staticType: bool
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@62
@@ -307,7 +307,7 @@
         literal: true
         staticType: bool
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -338,7 +338,7 @@
         literal: true
         staticType: bool
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@43
@@ -421,7 +421,7 @@
         literal: true
         staticType: bool
       separator: :
-      value: VariablePattern
+      value: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@54
@@ -482,7 +482,7 @@
           literal: true
           staticType: bool
         separator: :
-        value: VariablePattern
+        value: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@40
             type: int
@@ -532,7 +532,7 @@
           literal: true
           staticType: bool
         separator: :
-        value: VariablePattern
+        value: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@35
             type: int
@@ -574,7 +574,7 @@
           literal: true
           staticType: bool
         separator: :
-        value: VariablePattern
+        value: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart
index eeebf5b..670cde8 100644
--- a/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart
@@ -107,7 +107,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: foo2
         declaredElement: hasImplicitType foo2@90
@@ -225,7 +225,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@83
@@ -263,7 +263,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: foo2
         declaredElement: hasImplicitType foo2@84
@@ -338,7 +338,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: foo
         declaredElement: hasImplicitType foo@81
@@ -376,7 +376,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: foo
           declaredElement: hasImplicitType foo@82
@@ -416,7 +416,7 @@
         colon: :
       pattern: ParenthesizedPattern
         leftParenthesis: (
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: var
           name: foo
           declaredElement: hasImplicitType foo@82
@@ -491,7 +491,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: foo
         declaredElement: hasImplicitType foo@65
@@ -527,7 +527,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@77
@@ -580,7 +580,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@145
@@ -621,7 +621,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@141
@@ -658,7 +658,7 @@
       fieldName: RecordPatternFieldName
         name: hashCode
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@90
@@ -697,7 +697,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@85
@@ -734,7 +734,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@73
@@ -771,7 +771,7 @@
       fieldName: RecordPatternFieldName
         name: $0
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@71
@@ -808,7 +808,7 @@
         fieldName: RecordPatternFieldName
           name: foo
           colon: :
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@32
             type: int
@@ -862,7 +862,7 @@
         fieldName: RecordPatternFieldName
           name: foo
           colon: :
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@29
             type: int
@@ -918,7 +918,7 @@
         fieldName: RecordPatternFieldName
           name: foo
           colon: :
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
index 023a662..cc715f1 100644
--- a/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
@@ -30,7 +30,7 @@
     keyword: final
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: num
@@ -63,7 +63,7 @@
     keyword: final
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType isFinal a@20
           type: int
@@ -91,7 +91,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@18
           type: A
@@ -128,7 +128,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: num
@@ -162,7 +162,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -204,7 +204,7 @@
     keyword: var
     pattern: ParenthesizedPattern
       leftParenthesis: (
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@18
           type: int
@@ -232,13 +232,13 @@
       leftParenthesis: (
       fields
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: a
             declaredElement: hasImplicitType a@33
               type: int
           fieldElement: <null>
         RecordPatternField
-          pattern: VariablePattern
+          pattern: DeclaredVariablePattern
             name: b
             declaredElement: hasImplicitType b@36
               type: String
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_pattern_test.dart
index 4bc6471..796b8a9 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_pattern_test.dart
@@ -23,7 +23,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@34
@@ -44,7 +44,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@45
@@ -66,7 +66,7 @@
   pattern: ParenthesizedPattern
     leftParenthesis: (
     pattern: PostfixPattern
-      operand: VariablePattern
+      operand: DeclaredVariablePattern
         name: a
         declaredElement: hasImplicitType a@24
           type: int
@@ -89,7 +89,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@34
@@ -110,7 +110,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 PostfixPattern
-  operand: VariablePattern
+  operand: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@45
diff --git a/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart
index e8b0a8c..3e1558c 100644
--- a/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart
@@ -50,7 +50,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@46
@@ -73,7 +73,7 @@
     assertResolvedNodeText(node, r'''
 ParenthesizedPattern
   leftParenthesis: (
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: var
     name: y
     declaredElement: hasImplicitType y@41
@@ -144,7 +144,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -177,7 +177,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@54
@@ -226,7 +226,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         type: NamedType
           name: SimpleIdentifier
             token: int
@@ -256,7 +256,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@49
@@ -284,7 +284,7 @@
       fieldName: RecordPatternFieldName
         name: a
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: b
         declaredElement: hasImplicitType b@47
@@ -311,7 +311,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@46
@@ -338,7 +338,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@53
@@ -365,7 +365,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@60
@@ -390,7 +390,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@44
@@ -415,7 +415,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@55
@@ -457,7 +457,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@69
@@ -467,14 +467,14 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: b
         declaredElement: hasImplicitType b@81
           type: String
       fieldElement: <null>
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: c
         declaredElement: hasImplicitType c@88
@@ -502,7 +502,7 @@
       fieldName: RecordPatternFieldName
         name: bar
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@58
@@ -530,7 +530,7 @@
       fieldName: RecordPatternFieldName
         name: foo
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: y
         declaredElement: hasImplicitType y@58
@@ -585,7 +585,7 @@
     RecordPatternField
       fieldName: RecordPatternFieldName
         colon: :
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: foo
         declaredElement: hasImplicitType foo@55
@@ -613,7 +613,7 @@
       fieldName: RecordPatternFieldName
         colon: :
       pattern: PostfixPattern
-        operand: VariablePattern
+        operand: DeclaredVariablePattern
           keyword: var
           name: foo
           declaredElement: hasImplicitType foo@56
@@ -639,7 +639,7 @@
   leftParenthesis: (
   fields
     RecordPatternField
-      pattern: VariablePattern
+      pattern: DeclaredVariablePattern
         keyword: var
         name: a
         declaredElement: hasImplicitType a@48
@@ -663,13 +663,13 @@
     leftParenthesis: (
     fields
       RecordPatternField
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: a
           declaredElement: hasImplicitType a@33
             type: int
         fieldElement: <null>
       RecordPatternField
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: b
           declaredElement: hasImplicitType b@36
             type: String
@@ -699,7 +699,7 @@
     leftParenthesis: (
     fields
       RecordPatternField
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -711,7 +711,7 @@
             type: int
         fieldElement: <null>
       RecordPatternField
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: String
diff --git a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
index 21d2928..5da47a3 100644
--- a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
@@ -42,7 +42,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: MethodInvocation
@@ -75,7 +75,7 @@
     assertResolvedNodeText(node, r'''
 SwitchExpressionCase
   guardedPattern: GuardedPattern
-    pattern: VariablePattern
+    pattern: DeclaredVariablePattern
       name: _
   arrow: =>
   expression: FunctionExpressionInvocation
@@ -200,7 +200,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -245,7 +245,7 @@
         staticType: int
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: NullLiteral
@@ -290,7 +290,7 @@
         staticType: int
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -332,7 +332,7 @@
         pattern: ListPattern
           leftBracket: [
           elements
-            VariablePattern
+            DeclaredVariablePattern
               type: NamedType
                 name: SimpleIdentifier
                   token: int
@@ -373,7 +373,7 @@
         staticType: int
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: IntegerLiteral
@@ -410,7 +410,7 @@
   cases
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -442,7 +442,7 @@
         staticType: int
     SwitchExpressionCase
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           name: _
       arrow: =>
       expression: SimpleIdentifier
diff --git a/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart
index f9bea66..dd9447c 100644
--- a/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart
@@ -262,7 +262,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -291,7 +291,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -354,7 +354,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: final
           type: NamedType
             name: SimpleIdentifier
@@ -384,7 +384,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: final
           type: NamedType
             name: SimpleIdentifier
@@ -448,7 +448,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           keyword: final
           type: NamedType
             name: SimpleIdentifier
@@ -478,7 +478,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: num
@@ -541,7 +541,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -570,7 +570,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: num
@@ -641,7 +641,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -704,7 +704,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -775,7 +775,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -850,7 +850,7 @@
           colon: :
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
@@ -919,7 +919,7 @@
         pattern: ListPattern
           leftBracket: [
           elements
-            VariablePattern
+            DeclaredVariablePattern
               type: NamedType
                 name: SimpleIdentifier
                   token: int
@@ -990,7 +990,7 @@
     SwitchPatternCase
       keyword: case
       guardedPattern: GuardedPattern
-        pattern: VariablePattern
+        pattern: DeclaredVariablePattern
           type: NamedType
             name: SimpleIdentifier
               token: int
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index 146e824..94d1943 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -19,6 +19,7 @@
 import 'constant_test.dart' as constant;
 import 'constructor_reference_test.dart' as constructor_reference;
 import 'constructor_test.dart' as constructor;
+import 'declared_variable_pattern_test.dart' as declared_variable_pattern;
 import 'enum_test.dart' as enum_resolution;
 import 'extension_method_test.dart' as extension_method;
 import 'extension_override_test.dart' as extension_override;
@@ -88,7 +89,6 @@
 import 'type_inference/test_all.dart' as type_inference;
 import 'type_literal_test.dart' as type_literal;
 import 'type_name_test.dart' as type_name;
-import 'variable_pattern_test.dart' as variable_pattern;
 import 'variance_test.dart' as variance_test;
 import 'yield_statement_test.dart' as yield_statement;
 
@@ -107,8 +107,9 @@
     constant_pattern.main();
     comment.main();
     constant.main();
-    constructor.main();
     constructor_reference.main();
+    constructor.main();
+    declared_variable_pattern.main();
     enum_resolution.main();
     extension_method.main();
     extension_override.main();
@@ -173,7 +174,6 @@
     type_inference.main();
     type_literal.main();
     type_name.main();
-    variable_pattern.main();
     variance_test.main();
     yield_statement.main();
     defineReflectiveTests(UpdateNodeTextExpectations);
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart
index 98be3ae..17e71bd 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart
@@ -27,13 +27,13 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: var
     name: a
     declaredElement: hasImplicitType a@33
       type: int
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: var
     name: a
     declaredElement: hasImplicitType a@42
@@ -56,13 +56,13 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: var
     name: a
     declaredElement: hasImplicitType a@44
       type: int
   operator: &&
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: var
     name: a
     declaredElement: hasImplicitType a@53
diff --git a/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart
index 422f100..1507a97 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart
@@ -27,7 +27,7 @@
     final node1 = findNode.caseClause('case final a').guardedPattern;
     assertResolvedNodeText(node1, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@35
@@ -37,7 +37,7 @@
     final node2 = findNode.caseClause('case final b').guardedPattern;
     assertResolvedNodeText(node2, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: b
     declaredElement: hasImplicitType isFinal b@61
@@ -56,7 +56,7 @@
     final node1 = findNode.caseClause('case final a').guardedPattern;
     assertResolvedNodeText(node1, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@35
@@ -66,7 +66,7 @@
     final node2 = findNode.caseClause('case final b').guardedPattern;
     assertResolvedNodeText(node2, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: b
     declaredElement: hasImplicitType isFinal b@60
@@ -83,13 +83,13 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@35
       type: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@46
@@ -112,13 +112,13 @@
         literal: 0
         staticType: int
     operator: &&
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@40
         type: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@51
@@ -137,7 +137,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@35
@@ -166,7 +166,7 @@
       literal: 1
       staticType: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@40
@@ -187,7 +187,7 @@
     assertResolvedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@35
@@ -217,13 +217,13 @@
     assertResolvedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@35
         type: int
     operator: ||
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@46
@@ -246,19 +246,19 @@
     assertResolvedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@35
         type: int
     operator: ||
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@46
         type: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@57
@@ -278,7 +278,7 @@
     assertResolvedNodeText(node, r'''
 BinaryPattern
   leftOperand: BinaryPattern
-    leftOperand: VariablePattern
+    leftOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@35
@@ -289,7 +289,7 @@
         literal: 2
         staticType: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@51
@@ -315,7 +315,7 @@
         literal: 1
         staticType: int
     operator: ||
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@40
@@ -345,13 +345,13 @@
         literal: 1
         staticType: int
     operator: ||
-    rightOperand: VariablePattern
+    rightOperand: DeclaredVariablePattern
       keyword: final
       name: a
       declaredElement: hasImplicitType isFinal a@40
         type: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@51
@@ -381,7 +381,7 @@
         literal: 2
         staticType: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@45
@@ -401,13 +401,13 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@46
       type: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@57
@@ -429,7 +429,7 @@
     final node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
 BinaryPattern
-  leftOperand: VariablePattern
+  leftOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@46
@@ -461,7 +461,7 @@
       literal: 1
       staticType: int
   operator: ||
-  rightOperand: VariablePattern
+  rightOperand: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@51
@@ -483,7 +483,7 @@
     final node1 = findNode.switchPatternCase('case /*1*/').guardedPattern;
     assertResolvedNodeText(node1, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@52
@@ -493,7 +493,7 @@
     final node2 = findNode.switchPatternCase('case /*2*/').guardedPattern;
     assertResolvedNodeText(node2, r'''
 GuardedPattern
-  pattern: VariablePattern
+  pattern: DeclaredVariablePattern
     keyword: final
     name: a
     declaredElement: hasImplicitType isFinal a@76
diff --git a/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart b/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart
index fed6802..1524b7b 100644
--- a/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart
@@ -61,10 +61,10 @@
   pattern: ParenthesizedPattern
     leftParenthesis: (
     pattern: BinaryPattern
-      leftOperand: VariablePattern
+      leftOperand: DeclaredVariablePattern
         name: _
       operator: ||
-      rightOperand: VariablePattern
+      rightOperand: DeclaredVariablePattern
         name: _
     rightParenthesis: )
   equals: =
@@ -91,7 +91,7 @@
   pattern: ParenthesizedPattern
     leftParenthesis: (
     pattern: PostfixPattern
-      operand: VariablePattern
+      operand: DeclaredVariablePattern
         name: _
       operator: ?
     rightParenthesis: )
diff --git a/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart
new file mode 100644
index 0000000..5100b9e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart
@@ -0,0 +1,157 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SealedClassSubtypeOutsideOfLibraryTest);
+  });
+}
+
+@reflectiveTest
+class SealedClassSubtypeOutsideOfLibraryTest extends PubPackageResolutionTest {
+  test_class_extends_sealed_inside() async {
+    await assertNoErrorsInCode(r'''
+sealed class Foo {}
+class Bar extends Foo {}
+''');
+  }
+
+  test_class_extends_sealed_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+class Bar extends Foo {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 19, 24),
+    ]);
+  }
+
+  test_class_extends_sealed_outside_viaTypedef_inside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+typedef FooTypedef = Foo;
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+class Bar extends FooTypedef {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 19, 31),
+    ]);
+  }
+
+  test_class_extends_sealed_outside_viaTypedef_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+typedef FooTypedef = Foo;
+class Bar extends FooTypedef {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 45, 31),
+    ]);
+  }
+
+  test_class_extends_subtypeOfSealed_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+class Bar extends Foo {}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'foo.dart';
+class Bar2 extends Bar {}
+''');
+  }
+
+  test_class_implements_sealed_inside() async {
+    await assertNoErrorsInCode(r'''
+sealed class Foo {}
+class Bar implements Foo {}
+''');
+  }
+
+  test_class_implements_sealed_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+class Bar implements Foo {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 19, 27),
+    ]);
+  }
+
+  test_class_implements_sealed_outside_viaTypedef_inside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+typedef FooTypedef = Foo;
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+class Bar implements FooTypedef {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 19, 34),
+    ]);
+  }
+
+  test_class_implements_sealed_outside_viaTypedef_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+typedef FooTypedef = Foo;
+class Bar implements FooTypedef {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 45, 34),
+    ]);
+  }
+
+  test_class_implements_subtypeOfSealed_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+class Bar implements Foo {}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'foo.dart';
+class Bar2 implements Bar {}
+''');
+  }
+
+  test_mixin_implements_sealed_outside() async {
+    newFile('$testPackageLibPath/foo.dart', r'''
+sealed class Foo {}
+''');
+
+    await assertErrorsInCode(r'''
+import 'foo.dart';
+mixin Bar implements Foo {}
+''', [
+      error(
+          CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY, 19, 27),
+    ]);
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index dd56dff3..89fe1b3 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -687,6 +687,8 @@
 import 'sdk_version_ui_as_code_in_const_context_test.dart'
     as sdk_version_ui_as_code_in_const_context;
 import 'sdk_version_ui_as_code_test.dart' as sdk_version_ui_as_code;
+import 'sealed_class_subtype_outside_of_library_test.dart'
+    as sealed_class_subtype_outside_of_library;
 import 'set_element_from_deferred_library_test.dart'
     as set_element_from_deferred_library;
 import 'set_element_type_not_assignable_test.dart'
@@ -1268,6 +1270,7 @@
     sdk_version_set_literal.main();
     sdk_version_ui_as_code.main();
     sdk_version_ui_as_code_in_const_context.main();
+    sealed_class_subtype_outside_of_library.main();
     set_element_type_not_assignable.main();
     shared_deferred_prefix.main();
     size_annotation_dimensions.main();
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 8f48d74..6734483 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -7576,7 +7576,7 @@
 library
   definingUnit
     classes
-      sealed class C @13
+      abstract sealed class C @13
         constructors
           synthetic @-1
 ''');
@@ -9052,7 +9052,7 @@
 library
   definingUnit
     classes
-      sealed class alias C @13
+      abstract sealed class alias C @13
         supertype: Object
         mixins
           M
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 43734b4..ce27a4e 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -376,6 +376,29 @@
   }
 
   @override
+  void visitDeclaredVariablePattern(
+    covariant DeclaredVariablePatternImpl node,
+  ) {
+    _writeln('DeclaredVariablePattern');
+    _withIndent(() {
+      _writeNamedChildEntities(node);
+      if (_withResolution) {
+        final element = node.declaredElement;
+        if (element != null) {
+          _sink.write(_indent);
+          _sink.write('declaredElement: ');
+          _writeIf(element.hasImplicitType, 'hasImplicitType ');
+          _writeIf(element.isFinal, 'isFinal ');
+          _sink.writeln('${element.name}@${element.nameOffset}');
+          _withIndent(() {
+            _writeType('type', element.type);
+          });
+        }
+      }
+    });
+  }
+
+  @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
     _writeln('DefaultFormalParameter');
     _withIndent(() {
@@ -1489,27 +1512,6 @@
   }
 
   @override
-  void visitVariablePattern(covariant VariablePatternImpl node) {
-    _writeln('VariablePattern');
-    _withIndent(() {
-      _writeNamedChildEntities(node);
-      if (_withResolution) {
-        final element = node.declaredElement;
-        if (element != null) {
-          _sink.write(_indent);
-          _sink.write('declaredElement: ');
-          _writeIf(element.hasImplicitType, 'hasImplicitType ');
-          _writeIf(element.isFinal, 'isFinal ');
-          _sink.writeln('${element.name}@${element.nameOffset}');
-          _withIndent(() {
-            _writeType('type', element.type);
-          });
-        }
-      }
-    });
-  }
-
-  @override
   void visitWhenClause(WhenClause node) {
     _writeln('WhenClause');
     _withIndent(() {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index b11edb5..9db5d8f 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1534,15 +1534,15 @@
   ///
   /// If the library [element] is declared in is inside the `src` folder, will
   /// try to locate a public URI to import instead.
-  Future<void> importElementLibrary(Element element) async {
-    // TODO(dantup): Add the ability to pass a cache in to this function so
-    //  multiple callers can avoid looking up the same elements.
+  Future<void> importElementLibrary(Element element,
+      {Map<Element, LibraryElement?>? resultCache}) async {
     if (_isDefinedLocally(element) || _getImportElement(element) != null) {
       return;
     }
 
-    var libraryWithElement =
-        await TopLevelDeclarations(resolvedUnit).publiclyExporting(element);
+    var libraryWithElement = resultCache?[element] ??
+        await TopLevelDeclarations(resolvedUnit)
+            .publiclyExporting(element, resultCache: resultCache);
     if (libraryWithElement != null) {
       _elementLibrariesToImport[element] =
           _importLibrary(libraryWithElement.source.uri);
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 9af37a5..62be8bb 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -4,6 +4,7 @@
 
 // ignore_for_file: camel_case_types
 
+import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
@@ -12,9 +13,9 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart'
-    show DartLinkedEditBuilderImpl;
+    show DartFileEditBuilderImpl, DartLinkedEditBuilderImpl;
 import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -1804,6 +1805,12 @@
 @reflectiveTest
 class DartFileEditBuilderImplTest extends AbstractContextTest
     with DartChangeBuilderMixin {
+  Future<ResolvedUnitResult> resolveContent(String path, String content) async {
+    path = convertPath(path);
+    addSource(path, content);
+    return resolveFile(path);
+  }
+
   Future<void> test_convertFunctionFromSyncToAsync_closure() async {
     var path = convertPath('/home/test/lib/test.dart');
     addSource(path, '''var f = () {}''');
@@ -1934,6 +1941,96 @@
 ''');
   }
 
+  Future<void> test_importElementLibrary_libElement() async {
+    var resolvedUnit = await resolveContent('/home/test/lib/test.dart', '');
+
+    var resolvedLibUnit =
+        await resolveContent('/home/test/lib/a.dart', 'class A {}');
+
+    var findNode = FindNode(resolvedLibUnit.content, resolvedLibUnit.unit);
+    var classElement = findNode.classDeclaration('A').declaredElement!;
+    var cache = <Element, LibraryElement?>{};
+    var builder = await newBuilder();
+    await builder.addDartFileEdit(resolvedUnit.path, (builder) async {
+      var builderImpl = builder as DartFileEditBuilderImpl;
+      await builderImpl.importElementLibrary(classElement, resultCache: cache);
+    });
+
+    var edits = getEdits(builder);
+    expect(edits, hasLength(1));
+    expect(edits[0].replacement,
+        equalsIgnoringWhitespace("import 'package:test/a.dart';\n"));
+    expect(cache[classElement], resolvedLibUnit.libraryElement);
+  }
+
+  Future<void> test_importElementLibrary_sdkElement() async {
+    var resolvedUnit = await resolveContent('/home/test/lib/test.dart', '');
+
+    var futureOrElement = resolvedUnit.typeProvider.futureOrElement;
+    var cache = <Element, LibraryElement?>{};
+    var builder = await newBuilder();
+    await builder.addDartFileEdit(resolvedUnit.path, (builder) async {
+      var builderImpl = builder as DartFileEditBuilderImpl;
+      await builderImpl.importElementLibrary(futureOrElement,
+          resultCache: cache);
+    });
+
+    var edits = getEdits(builder);
+    expect(edits, hasLength(1));
+    expect(
+        edits[0].replacement, equalsIgnoringWhitespace("import 'dart:async';"));
+    expect(cache[futureOrElement], futureOrElement.library);
+  }
+
+  Future<void> test_importElementLibrary_srcElement() async {
+    var resolvedUnit = await resolveContent('/home/test/lib/test.dart', '');
+
+    var resolvedSrcUnit =
+        await resolveContent('/home/test/lib/src/a.dart', 'class A {}');
+
+    var resolvedExportUnit =
+        await resolveContent('/home/test/lib/a.dart', "export 'src/a.dart'");
+
+    var findNode = FindNode(resolvedSrcUnit.content, resolvedSrcUnit.unit);
+    var classElement = findNode.classDeclaration('A').declaredElement!;
+    var cache = <Element, LibraryElement?>{};
+    var builder = await newBuilder();
+    await builder.addDartFileEdit(resolvedUnit.path, (builder) async {
+      var builderImpl = builder as DartFileEditBuilderImpl;
+      await builderImpl.importElementLibrary(classElement, resultCache: cache);
+    });
+
+    var edits = getEdits(builder);
+    expect(edits, hasLength(1));
+    expect(edits[0].replacement,
+        equalsIgnoringWhitespace("import 'package:test/a.dart';\n"));
+    expect(cache[classElement], resolvedExportUnit.libraryElement);
+  }
+
+  Future<void> test_importElementLibrary_usesCache() async {
+    var resolvedUnit = await resolveContent('/home/test/lib/test.dart', '');
+
+    // Create a fake file to put into the cache to verify it's being used.
+    var resolvedFakeUnit = await resolveContent('/home/test/lib/fake.dart', '');
+
+    var futureOrElement = resolvedUnit.typeProvider.futureOrElement;
+    var cache = <Element, LibraryElement?>{
+      futureOrElement: resolvedFakeUnit.libraryElement,
+    };
+    var builder = await newBuilder();
+    await builder.addDartFileEdit(resolvedUnit.path, (builder) async {
+      var builderImpl = builder as DartFileEditBuilderImpl;
+      await builderImpl.importElementLibrary(futureOrElement,
+          resultCache: cache);
+    });
+
+    var edits = getEdits(builder);
+    expect(edits, hasLength(1));
+    expect(edits[0].replacement,
+        equalsIgnoringWhitespace("import 'package:test/fake.dart';"));
+    expect(cache[futureOrElement], resolvedFakeUnit.libraryElement);
+  }
+
   Future<void> test_multipleEdits_concurrently() async {
     var initialCode = '00';
     var path = convertPath('/home/test/lib/test.dart');
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 94025ed..c52be52 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -8428,7 +8428,8 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
     debugEvent('VariablePattern');
     assert(checkState(keyword ?? variable, [
       ValueKinds.TypeBuilderOrNull,
@@ -8443,6 +8444,7 @@
     if (variable.lexeme == "_") {
       pattern = new WildcardPattern(patternType, variable.charOffset);
     } else {
+      // TODO(paulberry): use inAssignmentPattern.
       pattern = new VariablePattern(
           patternType,
           variable.lexeme,
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index 27949a2..66bc63e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -2032,7 +2032,8 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
     _unsupported();
   }
 
diff --git a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
index 72fa1bc..76c11c8 100644
--- a/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart
@@ -1906,9 +1906,12 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
     VariablePatternHandle data = new VariablePatternHandle(ParserAstType.HANDLE,
-        keyword: keyword, variable: variable);
+        keyword: keyword,
+        variable: variable,
+        inAssignmentPattern: inAssignmentPattern);
     seen(data);
   }
 
@@ -6329,15 +6332,17 @@
 class VariablePatternHandle extends ParserAstNode {
   final Token? keyword;
   final Token variable;
+  final bool inAssignmentPattern;
 
   VariablePatternHandle(ParserAstType type,
-      {this.keyword, required this.variable})
+      {this.keyword, required this.variable, required this.inAssignmentPattern})
       : super("VariablePattern", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "keyword": keyword,
         "variable": variable,
+        "inAssignmentPattern": inAssignmentPattern,
       };
 }
 
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index fdf1f64..e8dff3a 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -864,7 +864,6 @@
 SdkSpecificationNotFound/example: Fail
 SdkSummaryNotFound/analyzerCode: Fail
 SdkSummaryNotFound/example: Fail
-SealedClassSubtypeOutsideOfLibrary/analyzerCode: Fail
 SealedClassSubtypeOutsideOfLibrary/part_wrapped_script: Fail # Uses imports
 SealedMixinSubtypeOutsideOfLibrary/analyzerCode: Fail
 SealedMixinSubtypeOutsideOfLibrary/part_wrapped_script: Fail # Uses imports
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index fc7da85..241aedc 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -6004,6 +6004,7 @@
 
 SealedClassSubtypeOutsideOfLibrary:
   problemMessage: "Sealed class '#name' can't be extended, implemented, or mixed in outside of its library."
+  analyzerCode: SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
   experiments: sealed-class
   script:
     main.dart:
diff --git a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_case.dart.intertwined.expect
index b8e0f58..6e00cbb 100644
--- a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_case.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_cast.dart.intertwined.expect
index 45a8b23..d593584 100644
--- a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_cast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_if_case.dart.intertwined.expect
index 46139c6..a0d3dd8 100644
--- a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_assert.dart.intertwined.expect
index d4bb2f7..2decdde 100644
--- a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_assert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_check.dart.intertwined.expect
index ae5fc42..7f10027 100644
--- a/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/boolean_literal_inside_null_check.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideIfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideIfStatement.dart.intertwined.expect
index 78ddf45..0cf06bd 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideIfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideIfStatement.dart.intertwined.expect
@@ -58,8 +58,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideSwitchStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideSwitchStatement.dart.intertwined.expect
index f9f1a37..093794d 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideSwitchStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_guarded_insideSwitchStatement.dart.intertwined.expect
@@ -66,8 +66,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideIfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideIfStatement.dart.intertwined.expect
index f450d63..6df4683 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideIfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideIfStatement.dart.intertwined.expect
@@ -58,8 +58,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideSwitchStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
index 9e9df2a..9e63c00 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withClassicPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
@@ -66,8 +66,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideIfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideIfStatement.dart.intertwined.expect
index b403f66..97e6ad4 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideIfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideIfStatement.dart.intertwined.expect
@@ -58,8 +58,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideSwitchStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideSwitchStatement.dart.intertwined.expect
index bfc1c6e..e0a4f9e 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideSwitchStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_guarded_insideSwitchStatement.dart.intertwined.expect
@@ -66,8 +66,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideIfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideIfStatement.dart.intertwined.expect
index 94a6fc9..cb7ee39 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideIfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideIfStatement.dart.intertwined.expect
@@ -58,8 +58,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideSwitchStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
index b400811..47bded5 100644
--- a/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/caseHead_withNewPattern_unguarded_insideSwitchStatement.dart.intertwined.expect
@@ -66,8 +66,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_case.dart.intertwined.expect
index fc08ae6..b311d5e 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_case.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
index 256aee6..e6c40fe 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
index 5d1a77f..9871124 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
@@ -56,7 +56,7 @@
               handleNoTypeArguments(()
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, f)
+              handleVariablePattern(var, f, false)
               beginAsOperatorType(as)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments())
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index af1c600..b37c465 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -113,16 +113,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, f)
+                              listener: handleVariablePattern(var, f, false)
                           listener: beginAsOperatorType(as)
                           computeTypeAfterIsOrAs(as)
                           listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.expect
index 8f4e727..7a0fbe4 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(var)
-          handleVariablePattern(var, y)
+          handleVariablePattern(var, y, false)
           beginAsOperatorType(as)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments())
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.intertwined.expect
index dcdbc22..f5a033d 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_if_case.dart.intertwined.expect
@@ -61,11 +61,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(var)
-                          listener: handleVariablePattern(var, y)
+                          listener: handleVariablePattern(var, y, false)
                       listener: beginAsOperatorType(as)
                       computeTypeAfterIsOrAs(as)
                       listener: handleIdentifier(int, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_list_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_list_pattern.dart.intertwined.expect
index feea266..3d72595 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_list_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_list_pattern.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.expect
index f22bc8d..99b746b 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
@@ -41,7 +41,7 @@
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
                 handleType(Object, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(&&)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.intertwined.expect
index f38103f..1621d04 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(double, typeReference)
@@ -84,13 +84,13 @@
                     listener: endAsOperatorType(as)
                     listener: handleCastPattern(as)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(Object, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(Object, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(&&)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.expect
index 03f6122..92b1779 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.expect
@@ -30,12 +30,12 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(&&)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
                 beginAsOperatorType(as)
                   handleIdentifier(Object, typeReference)
                   handleNoTypeArguments(?)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.intertwined.expect
index 2233b21..95bf73c 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_and_rhs.dart.intertwined.expect
@@ -69,21 +69,21 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                       listener: beginAsOperatorType(as)
                       computeTypeAfterIsOrAs(as)
                       listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.expect
index b0ea97e..ec686a0 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
@@ -41,7 +41,7 @@
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
                 handleType(Object, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(||)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.intertwined.expect
index 8470d81..3ac2b64 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(double, typeReference)
@@ -84,13 +84,13 @@
                     listener: endAsOperatorType(as)
                     listener: handleCastPattern(as)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(Object, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(Object, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(||)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.expect
index ec337d6..1283c09 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.expect
@@ -30,12 +30,12 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(||)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
                 beginAsOperatorType(as)
                   handleIdentifier(Object, typeReference)
                   handleNoTypeArguments(?)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.intertwined.expect
index 1fc7fdf..e6c550d 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,21 +69,21 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                       listener: beginAsOperatorType(as)
                       computeTypeAfterIsOrAs(as)
                       listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_map_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_map_pattern.dart.intertwined.expect
index a4edaa2..b86afa3 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_map_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_map_pattern.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_parenthesized_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_parenthesized_pattern.dart.intertwined.expect
index aff6005..bd6716e 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_parenthesized_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_parenthesized_pattern.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.expect
index dabdcb9..85c01f1 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.expect
@@ -29,7 +29,7 @@
             beginCaseExpression(case)
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, n)
+              handleVariablePattern(var, n, false)
               beginAsOperatorType(as)
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(,)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.intertwined.expect
index f608927..a0a8179 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_implicitly_named.dart.intertwined.expect
@@ -69,15 +69,15 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, n)
+                              listener: handleVariablePattern(var, n, false)
                           listener: beginAsOperatorType(as)
                           computeTypeAfterIsOrAs(as)
                           listener: handleIdentifier(int, typeReference)
@@ -86,8 +86,8 @@
                           listener: endAsOperatorType(as)
                           listener: handleCastPattern(as)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_named.dart.intertwined.expect
index 82dddc2..4a309ea 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_named.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         ensureIdentifier((, namedRecordFieldReference)
                           listener: handleIdentifier(n, namedRecordFieldReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
@@ -90,8 +90,8 @@
                           listener: endAsOperatorType(as)
                           listener: handleCastPattern(as)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_unnamed.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_unnamed.dart.intertwined.expect
index cf2cb93..8c639e8 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_unnamed.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_record_pattern_unnamed.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -88,8 +88,8 @@
                           listener: endAsOperatorType(as)
                           listener: handleCastPattern(as)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_builtin.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_builtin.dart.intertwined.expect
index 97aba29..7a3e069 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_builtin.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_builtin.dart.intertwined.expect
@@ -131,8 +131,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCase.dart.intertwined.expect
index 3b82366..63f0097 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCast.dart.intertwined.expect
index 9d4779c..9caf2c9 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideIfCase.dart.intertwined.expect
index bbf6005..1f8ba62 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullAssert.dart.intertwined.expect
index 4474c1e..c055a0a 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullCheck.dart.intertwined.expect
index 0b77517..d52cbbe 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_pseudoKeyword.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_pseudoKeyword.dart.intertwined.expect
index 112a32d..9e09325 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_pseudoKeyword.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_doublyPrefixed_pseudoKeyword.dart.intertwined.expect
@@ -131,8 +131,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_case.dart.intertwined.expect
index 77d1048..a826821 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_case.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_cast.dart.intertwined.expect
index bfdbe23..d13f09a2 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_cast.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_if_case.dart.intertwined.expect
index 5fbdaf0..467dfb9 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_if_case.dart.intertwined.expect
@@ -90,8 +90,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_assert.dart.intertwined.expect
index 8eb976c..0edd0ab 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_assert.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_check.dart.intertwined.expect
index e6eb394..37406ac 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_inside_null_check.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixedWithUnderscore_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixedWithUnderscore_insideCase.dart.intertwined.expect
index d2e28a3..53f9175 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixedWithUnderscore_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixedWithUnderscore_insideCase.dart.intertwined.expect
@@ -66,8 +66,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_builtin.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_builtin.dart.intertwined.expect
index b54e7fb..d994b09 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_builtin.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_builtin.dart.intertwined.expect
@@ -118,8 +118,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCase.dart.intertwined.expect
index 711c7ac..945a9551 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCast.dart.intertwined.expect
index 4cb5a81..1e16276 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideIfCase.dart.intertwined.expect
index 6b82410..831aef0 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullAssert.dart.intertwined.expect
index 529d859..fcb2700 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullCheck.dart.intertwined.expect
index d4370df..f402196 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_pseudoKeyword.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_pseudoKeyword.dart.intertwined.expect
index d657127..c2fecd2 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_pseudoKeyword.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_prefixed_pseudoKeyword.dart.intertwined.expect
@@ -118,8 +118,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_beforeWhen.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_beforeWhen.dart.intertwined.expect
index 09b8c7c..53049cb 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_beforeWhen.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_beforeWhen.dart.intertwined.expect
@@ -95,8 +95,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_builtin.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_builtin.dart.intertwined.expect
index 74822cc..6c4acbb 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_builtin.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_builtin.dart.intertwined.expect
@@ -105,8 +105,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_insideSwitchExpression.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_insideSwitchExpression.dart.intertwined.expect
index 6f89a56..2b4316c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_insideSwitchExpression.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_insideSwitchExpression.dart.intertwined.expect
@@ -68,8 +68,8 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           parsePrecedenceExpression({, 17, false)
                             parseUnaryExpression({, false)
                               parsePrimary({, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_pseudoKeyword.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_pseudoKeyword.dart.intertwined.expect
index f93c4b0..625508e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_pseudoKeyword.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_identifier_unprefixed_pseudoKeyword.dart.intertwined.expect
@@ -105,8 +105,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCase.dart.intertwined.expect
index cf79697..f1e4d5c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCast.dart.intertwined.expect
index abda7aa..ffd8541 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideIfCase.dart.intertwined.expect
index 87bd6d7..8ba24be 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullAssert.dart.intertwined.expect
index 7d76540..e21948c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullCheck.dart.intertwined.expect
index bbfddee..07f853d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_empty_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCase.dart.intertwined.expect
index cfecb37..74e32db 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCast.dart.intertwined.expect
index 1df5f1a..cd614ea 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideIfCase.dart.intertwined.expect
index b46f1cc..b514275 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullAssert.dart.intertwined.expect
index 44a10c23..ab2984e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullCheck.dart.intertwined.expect
index d6f53f8..5615bdb 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_typed_nonEmpty_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCase.dart.intertwined.expect
index 3d89775..2b091b3 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCast.dart.intertwined.expect
index da751d9..467fb1e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideIfCase.dart.intertwined.expect
index bc000dd..23693bd 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullAssert.dart.intertwined.expect
index c8d3737..ef9a1976 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullCheck.dart.intertwined.expect
index 2fa02f0..914214d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_empty_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCase.dart.intertwined.expect
index 2d16fc6..20b0292 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCast.dart.intertwined.expect
index bc12440..3e8765df 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideIfCase.dart.intertwined.expect
index f8c8fce..8bc259c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullAssert.dart.intertwined.expect
index 2c9cb9d..41e00e2 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullCheck.dart.intertwined.expect
index 529c0ca..b58b956 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_list_untyped_nonEmpty_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
index e66dc5a..62dbd5e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
index cec2c64..a19e1cd 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
index 814781d..5de20af 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
index 2953c49..1ec5226 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
index 8741a27..287b474 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
index b279dfd..1df115c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
index 9e8b736..cf08341 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
index 922d1a9..5f4a6ff 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
index 1cda99b..55eb8d4 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
index 3bb1045..c2e9b86 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCase.dart.intertwined.expect
index 8ed47ae3..7744850 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCast.dart.intertwined.expect
index 9226b57..6163756 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideIfCase.dart.intertwined.expect
index 19ee169..0c53e46 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullAssert.dart.intertwined.expect
index ef176e8..92d8992 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullCheck.dart.intertwined.expect
index 87732c6..76a331f 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_objectExpression_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCase.dart.intertwined.expect
index 9b548d0..13baa44 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCast.dart.intertwined.expect
index bdaa899..6ef8f98 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideIfCase.dart.intertwined.expect
index 9e6ce5bb..f689a3e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullAssert.dart.intertwined.expect
index 039af5b..bc57b81 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullCheck.dart.intertwined.expect
index f8d1a04..01f56bb 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_parenthesized_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCase.dart.intertwined.expect
index 2085bb9..1310d56 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCast.dart.intertwined.expect
index 431879a..fd2e299 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideIfCase.dart.intertwined.expect
index 668cdb6..1ad4783 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullAssert.dart.intertwined.expect
index 0c2f5e1..c1cbd3d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullCheck.dart.intertwined.expect
index 5b126ed..90d53ed 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_typed_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCase.dart.intertwined.expect
index 3b0d39a..2f86114 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCase.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCast.dart.intertwined.expect
index 8bb8e06..ee986c1 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideCast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideIfCase.dart.intertwined.expect
index 7964395..a7d122c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideIfCase.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(const, 17, false)
                           parseUnaryExpression(const, false)
                             parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullAssert.dart.intertwined.expect
index 8575618..09922178 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullAssert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullCheck.dart.intertwined.expect
index 8afddc3..a43de97 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_set_untyped_insideNullCheck.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(const, 17, false)
                         parseUnaryExpression(const, false)
                           parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/double_literal_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/double_literal_inside_case.dart.intertwined.expect
index 5dca641..074a32d 100644
--- a/pkg/front_end/parser_testcases/patterns/double_literal_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/double_literal_inside_case.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/double_literal_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/double_literal_inside_cast.dart.intertwined.expect
index 4c8ff87..31882d5 100644
--- a/pkg/front_end/parser_testcases/patterns/double_literal_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/double_literal_inside_cast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/double_literal_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/double_literal_inside_if_case.dart.intertwined.expect
index 721068a..9a582ef 100644
--- a/pkg/front_end/parser_testcases/patterns/double_literal_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/double_literal_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_assert.dart.intertwined.expect
index 9199719..5b52989 100644
--- a/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_assert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_check.dart.intertwined.expect
index c6e5e8d..480b1a1 100644
--- a/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/double_literal_inside_null_check.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
index bfae2dc..5dafd3f 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
index 3a2789a..91d15db 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
index 6c79e1c..6a5a19a 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args.dart.intertwined.expect
index 37c544a..8ca26ce 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args.dart.intertwined.expect
@@ -104,14 +104,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(C, null, null)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
index bf05643..fdf7e27 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
@@ -121,18 +121,18 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
index c7c4d01..f770d35 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
@@ -66,14 +66,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, ., Future)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
index f1a4fb9..bb77a2d 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_prefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
@@ -66,10 +66,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(Future, isRefutableContext: true)
+                      parseObjectPatternRest(Future, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, ., Future)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
index 66c28bd..b29259b 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withTypeArgs_insideCase.dart.intertwined.expect
@@ -66,14 +66,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, null, null)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
index 5e889cc4..a413a46 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_unprefixedNamedUnderscore_withoutTypeArgs_insideCase.dart.intertwined.expect
@@ -66,10 +66,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(_, isRefutableContext: true)
+                      parseObjectPatternRest(_, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, null, null)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.expect
index 1d75c91..bf701cf 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.intertwined.expect
index 7518379..5039700 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_case.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                   ensureColon(y)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.expect
index 80d63f7..53d4c95 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.intertwined.expect
index 7e74dcc..a357004 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_cast.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.expect
index 58c69d9..3f6453f 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(final)
-          handleVariablePattern(final, y)
+          handleVariablePattern(final, y, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.intertwined.expect
index d4fcfb3..fbe35fd 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_if_case.dart.intertwined.expect
@@ -61,11 +61,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(final)
-                          listener: handleVariablePattern(final, y)
+                          listener: handleVariablePattern(final, y, false)
                     ensureCloseParen(y, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.expect
index c9bf2ae..6d99048 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.intertwined.expect
index a05368d..aa192b4 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_assert.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.expect
index 9f5f380..af7172d 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.intertwined.expect
index 87f0321..1ca4c92 100644
--- a/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/final_variable_inside_null_check.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.expect
index 62c4b0d..83bb0ea 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.expect
@@ -30,7 +30,7 @@
         handleNoArguments(case)
         handleSend(x, case)
         handleNoType(case)
-        handleVariablePattern(null, _)
+        handleVariablePattern(null, _, false)
         handleIdentifier(y, expression)
         handleNoTypeArguments(+)
         handleNoArguments(+)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.intertwined.expect
index 15615fa..de77693 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_element.dart.intertwined.expect
@@ -73,11 +73,11 @@
                                       parseArgumentsOpt(x)
                                         listener: handleNoArguments(case)
                                       listener: handleSend(x, case)
-                          parsePattern(case, precedence: 1, isRefutableContext: true)
-                            parsePrimaryPattern(case, isRefutableContext: true)
-                              parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                          parsePattern(case, PatternContext.matching, precedence: 1)
+                            parsePrimaryPattern(case, PatternContext.matching)
+                              parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(case)
-                                listener: handleVariablePattern(null, _)
+                                listener: handleVariablePattern(null, _, false)
                           parseExpression(when)
                             looksLikeOuterPatternEquals(when)
                               skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.expect
index 6b1a589..a300270 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.expect
@@ -30,7 +30,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(case)
-          handleVariablePattern(null, _)
+          handleVariablePattern(null, _, false)
           handleIdentifier(y, expression)
           handleNoTypeArguments(+)
           handleNoArguments(+)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.intertwined.expect
index 2f39dad..5a9709a 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideIfCaseWhenClause_statement.dart.intertwined.expect
@@ -69,11 +69,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(case)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     parseExpression(when)
                       looksLikeOuterPatternEquals(when)
                         skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideListPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideListPattern.dart.intertwined.expect
index 7f3c915..7697b15 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideListPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideListPattern.dart.intertwined.expect
@@ -68,12 +68,12 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments([)
-                          parseListPatternSuffix({, isRefutableContext: true)
-                            parsePattern([, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern([, isRefutableContext: true)
+                          parseListPatternSuffix({, PatternContext.matching)
+                            parsePattern([, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern([, PatternContext.matching)
                                 parsePrecedenceExpression(==, 12, false)
                                   parseUnaryExpression(==, false)
                                     parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideMapPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideMapPattern.dart.intertwined.expect
index d09a90d..9861736 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideMapPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideMapPattern.dart.intertwined.expect
@@ -68,10 +68,10 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments({)
-                          parseMapPatternSuffix({, isRefutableContext: true)
+                          parseMapPatternSuffix({, PatternContext.matching)
                             parseExpression({)
                               looksLikeOuterPatternEquals({)
                                 skipOuterPattern({)
@@ -82,8 +82,8 @@
                                       parseSingleLiteralString({)
                                         listener: beginLiteralString('x')
                                         listener: endLiteralString(0, :)
-                            parsePattern(:, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern(:, isRefutableContext: true)
+                            parsePattern(:, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern(:, PatternContext.matching)
                                 parsePrecedenceExpression(==, 12, false)
                                   parseUnaryExpression(==, false)
                                     parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideObjectPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideObjectPattern.dart.intertwined.expect
index 758e860..8cb22df 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideObjectPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideObjectPattern.dart.intertwined.expect
@@ -68,14 +68,14 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments(()
-                          parseObjectPatternRest(Foo, isRefutableContext: true)
+                          parseObjectPatternRest(Foo, PatternContext.matching)
                             ensureIdentifier((, namedArgumentReference)
                               listener: handleIdentifier(bar, namedArgumentReference)
-                            parsePattern(:, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern(:, isRefutableContext: true)
+                            parsePattern(:, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern(:, PatternContext.matching)
                                 parsePrecedenceExpression(==, 12, false)
                                   parseUnaryExpression(==, false)
                                     parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedConstPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedConstPattern.dart.intertwined.expect
index 233de11..9e70f6f 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedConstPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedConstPattern.dart.intertwined.expect
@@ -68,8 +68,8 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           parsePrecedenceExpression(const, 17, false)
                             parseUnaryExpression(const, false)
                               parsePrimary(const, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedPattern.dart.intertwined.expect
index 97b833b..7ee901e 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideParenthesizedPattern.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseParenthesizedPatternOrRecordPattern({, isRefutableContext: true)
-                            parsePattern((, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern((, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseParenthesizedPatternOrRecordPattern({, PatternContext.matching)
+                            parsePattern((, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern((, PatternContext.matching)
                                 parsePrecedenceExpression(==, 12, false)
                                   parseUnaryExpression(==, false)
                                     parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.expect
index 2914ad8..839eefc 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             beginSwitchExpression(switch)
               handleIdentifier(x, expression)
               handleNoTypeArguments())
@@ -35,7 +35,7 @@
               beginSwitchExpressionBlock({)
                 beginSwitchExpressionCase()
                   handleNoType({)
-                  handleVariablePattern(null, _)
+                  handleVariablePattern(null, _, false)
                   handleLiteralBool(true)
                   handleNoTypeVariables(()
                   beginFunctionExpression(()
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.intertwined.expect
index 4765fe3..2370762 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_guarded.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
@@ -105,11 +105,11 @@
                                 ensureBlock(), null, switch expression)
                                 listener: beginSwitchExpressionBlock({)
                                 listener: beginSwitchExpressionCase()
-                                parsePattern({, precedence: 1, isRefutableContext: true)
-                                  parsePrimaryPattern({, isRefutableContext: true)
-                                    parseVariablePattern({, typeInfo: Instance of 'NoType')
+                                parsePattern({, PatternContext.matching, precedence: 1)
+                                  parsePrimaryPattern({, PatternContext.matching)
+                                    parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                                       listener: handleNoType({)
-                                      listener: handleVariablePattern(null, _)
+                                      listener: handleVariablePattern(null, _, false)
                                 parseExpression(when)
                                   looksLikeOuterPatternEquals(when)
                                     skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.expect
index 5489461..e75ae7d 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             beginSwitchExpression(switch)
               handleIdentifier(x, expression)
               handleNoTypeArguments())
@@ -35,7 +35,7 @@
               beginSwitchExpressionBlock({)
                 beginSwitchExpressionCase()
                   handleNoType({)
-                  handleVariablePattern(null, _)
+                  handleVariablePattern(null, _, false)
                   handleNoTypeVariables(()
                   beginFunctionExpression(()
                     beginFormalParameters((, MemberKind.Local)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.intertwined.expect
index 83b6117..d39675b 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchExpressionCase_unguarded.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
@@ -105,11 +105,11 @@
                                 ensureBlock(), null, switch expression)
                                 listener: beginSwitchExpressionBlock({)
                                 listener: beginSwitchExpressionCase()
-                                parsePattern({, precedence: 1, isRefutableContext: true)
-                                  parsePrimaryPattern({, isRefutableContext: true)
-                                    parseVariablePattern({, typeInfo: Instance of 'NoType')
+                                parsePattern({, PatternContext.matching, precedence: 1)
+                                  parsePrimaryPattern({, PatternContext.matching)
+                                    parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                                       listener: handleNoType({)
-                                      listener: handleVariablePattern(null, _)
+                                      listener: handleVariablePattern(null, _, false)
                                 ensureFunctionArrow(_)
                                 parseExpression(=>)
                                   looksLikeOuterPatternEquals(=>)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.expect
index 7bcdc50..d20b829 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.expect
@@ -33,7 +33,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleIdentifier(y, expression)
               handleNoTypeArguments(+)
               handleNoArguments(+)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.intertwined.expect
index 873bb8a..1c663d7 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_allowed_insideSwitchStatementInWhenClause.dart.intertwined.expect
@@ -77,11 +77,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                   parseExpression(when)
                     looksLikeOuterPatternEquals(when)
                       skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.expect
index a4e8424..71d03d3 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchExpressionCase()
             handleNoTypeArguments([)
             handleNoType([)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleListPattern(1, [, ])
             beginParenthesizedExpressionOrRecordLiteral(()
             endRecordLiteral((, 0, null)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.intertwined.expect
index 4adb62d..cea5f98 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterListPattern.dart.intertwined.expect
@@ -68,15 +68,15 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments([)
-                          parseListPatternSuffix({, isRefutableContext: true)
-                            parsePattern([, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern([, isRefutableContext: true)
-                                parseVariablePattern([, typeInfo: Instance of 'NoType')
+                          parseListPatternSuffix({, PatternContext.matching)
+                            parsePattern([, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern([, PatternContext.matching)
+                                parseVariablePattern([, PatternContext.matching, typeInfo: Instance of 'NoType')
                                   listener: handleNoType([)
-                                  listener: handleVariablePattern(null, _)
+                                  listener: handleVariablePattern(null, _, false)
                             listener: handleListPattern(1, [, ])
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.expect
index 8107fc2..fbdfcf2 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.expect
@@ -28,7 +28,7 @@
             beginLiteralString('x')
             endLiteralString(0, :)
             handleNoType(:)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleMapPatternEntry(:, })
             handleMapPattern(1, {, })
             beginParenthesizedExpressionOrRecordLiteral(()
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.intertwined.expect
index 45e47dd..d3323d4 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterMapPattern.dart.intertwined.expect
@@ -68,10 +68,10 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments({)
-                          parseMapPatternSuffix({, isRefutableContext: true)
+                          parseMapPatternSuffix({, PatternContext.matching)
                             parseExpression({)
                               looksLikeOuterPatternEquals({)
                                 skipOuterPattern({)
@@ -82,11 +82,11 @@
                                       parseSingleLiteralString({)
                                         listener: beginLiteralString('x')
                                         listener: endLiteralString(0, :)
-                            parsePattern(:, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern(:, isRefutableContext: true)
-                                parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                            parsePattern(:, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern(:, PatternContext.matching)
+                                parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(:)
-                                  listener: handleVariablePattern(null, _)
+                                  listener: handleVariablePattern(null, _, false)
                             listener: handleMapPatternEntry(:, })
                             listener: handleMapPattern(1, {, })
                       parseExpression(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.expect
index fb59b3f..17a47ef 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.expect
@@ -27,7 +27,7 @@
             handleNoTypeArguments(()
             handleIdentifier(bar, namedArgumentReference)
             handleNoType(:)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handlePatternField(:)
             handleObjectPatternFields(1, (, ))
             handleObjectPattern(Foo, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.intertwined.expect
index bbd787f..362f39b 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterObjectPattern.dart.intertwined.expect
@@ -68,17 +68,17 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
                           listener: handleNoTypeArguments(()
-                          parseObjectPatternRest(Foo, isRefutableContext: true)
+                          parseObjectPatternRest(Foo, PatternContext.matching)
                             ensureIdentifier((, namedArgumentReference)
                               listener: handleIdentifier(bar, namedArgumentReference)
-                            parsePattern(:, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern(:, isRefutableContext: true)
-                                parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                            parsePattern(:, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern(:, PatternContext.matching)
+                                parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(:)
-                                  listener: handleVariablePattern(null, _)
+                                  listener: handleVariablePattern(null, _, false)
                             listener: handlePatternField(:)
                             listener: handleObjectPatternFields(1, (, ))
                           listener: handleObjectPattern(Foo, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.expect
index 3c7c550..adb8c11 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType(()
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleParenthesizedPattern(()
             beginParenthesizedExpressionOrRecordLiteral(()
             endRecordLiteral((, 0, null)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.intertwined.expect
index 089c757..70f50ec 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterParenthesizedPattern.dart.intertwined.expect
@@ -68,14 +68,14 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseParenthesizedPatternOrRecordPattern({, isRefutableContext: true)
-                            parsePattern((, precedence: 1, isRefutableContext: true)
-                              parsePrimaryPattern((, isRefutableContext: true)
-                                parseVariablePattern((, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseParenthesizedPatternOrRecordPattern({, PatternContext.matching)
+                            parsePattern((, PatternContext.matching, precedence: 1)
+                              parsePrimaryPattern((, PatternContext.matching)
+                                parseVariablePattern((, PatternContext.matching, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(()
-                                  listener: handleVariablePattern(null, _)
+                                  listener: handleVariablePattern(null, _, false)
                             ensureCloseParen(_, ()
                             listener: handleParenthesizedPattern(()
                       parseExpression(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.expect
index 3b0ac92..d96cbce 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             beginSwitchExpression(switch)
               handleIdentifier(x, expression)
               handleNoTypeArguments())
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.intertwined.expect
index ca03d26..50d1a34 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_afterSwitchExpressionInWhenClause.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.expect
index 159847a..1b9122c 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.expect
@@ -32,7 +32,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleIdentifier(y, expression)
             handleNoTypeArguments(+)
             handleNoArguments(+)
diff --git a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.intertwined.expect
index f8ea54f..4c2f6bf 100644
--- a/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/functionExpression_disallowed_insideSwitchExpressionInWhenClause.dart.intertwined.expect
@@ -78,11 +78,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_case.dart.intertwined.expect
index 764a624..b35c5c7 100644
--- a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_case.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_cast.dart.intertwined.expect
index 77fbfe0..03f2ce3 100644
--- a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_cast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_if_case.dart.intertwined.expect
index b1c0dde..ebf4852 100644
--- a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_assert.dart.intertwined.expect
index e8178df..9684b99 100644
--- a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_assert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_check.dart.intertwined.expect
index aecb835..4fc7a7c 100644
--- a/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/integer_literal_inside_null_check.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/issue50591.dart.expect b/pkg/front_end/parser_testcases/patterns/issue50591.dart.expect
index 96aa656..616b764 100644
--- a/pkg/front_end/parser_testcases/patterns/issue50591.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue50591.dart.expect
@@ -39,7 +39,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleIdentifier(a, expression)
             handleNoTypeArguments(()
             beginArguments(()
diff --git a/pkg/front_end/parser_testcases/patterns/issue50591.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/issue50591.dart.intertwined.expect
index e86e853..c5b75b9 100644
--- a/pkg/front_end/parser_testcases/patterns/issue50591.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue50591.dart.intertwined.expect
@@ -88,11 +88,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.expect b/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.expect
index abb05ed..3753b96 100644
--- a/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.expect
@@ -44,7 +44,7 @@
               endSwitchExpressionCase(null, =>, 0)
               beginSwitchExpressionCase()
                 handleNoType(,)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
                 handleLiteralInt(1)
               endSwitchExpressionCase(null, =>, 1)
             endSwitchExpressionBlock(2, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.intertwined.expect
index fa4b238..dfde1aaf 100644
--- a/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue50591_example2.dart.intertwined.expect
@@ -85,8 +85,8 @@
                                           ensureBlock(), null, switch expression)
                                           listener: beginSwitchExpressionBlock({)
                                           listener: beginSwitchExpressionCase()
-                                          parsePattern({, precedence: 1, isRefutableContext: true)
-                                            parsePrimaryPattern({, isRefutableContext: true)
+                                          parsePattern({, PatternContext.matching, precedence: 1)
+                                            parsePrimaryPattern({, PatternContext.matching)
                                               parsePrecedenceExpression(const, 17, false)
                                                 parseUnaryExpression(const, false)
                                                   parsePrimary(const, expression)
@@ -114,11 +114,11 @@
                                                     listener: handleLiteralInt(0)
                                           listener: endSwitchExpressionCase(null, =>, 0)
                                           listener: beginSwitchExpressionCase()
-                                          parsePattern(,, precedence: 1, isRefutableContext: true)
-                                            parsePrimaryPattern(,, isRefutableContext: true)
-                                              parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                          parsePattern(,, PatternContext.matching, precedence: 1)
+                                            parsePrimaryPattern(,, PatternContext.matching)
+                                              parseVariablePattern(,, PatternContext.matching, typeInfo: Instance of 'NoType')
                                                 listener: handleNoType(,)
-                                                listener: handleVariablePattern(null, _)
+                                                listener: handleVariablePattern(null, _, false)
                                           ensureFunctionArrow(_)
                                           parseExpression(=>)
                                             looksLikeOuterPatternEquals(=>)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.expect
index 5a0299c..0e83f25 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.expect
@@ -23,9 +23,9 @@
           handleType(int, null)
         endTypeArguments(1, <, >)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, true)
         handleListPattern(2, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.intertwined.expect
index 370c1c3..edc3cbe 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_typed_nonEmpty.dart.intertwined.expect
@@ -46,24 +46,24 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: beginTypeArguments(<)
                             listener: handleIdentifier(int, typeReference)
                             listener: handleNoTypeArguments(>)
                             listener: handleType(int, null)
                             listener: endTypeArguments(1, <, >)
-                            parseListPatternSuffix(>, isRefutableContext: false)
-                              parsePattern([, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern([, isRefutableContext: false)
-                                  parseVariablePattern([, typeInfo: Instance of 'NoType')
+                            parseListPatternSuffix(>, PatternContext.assignment)
+                              parsePattern([, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern([, PatternContext.assignment)
+                                  parseVariablePattern([, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType([)
-                                    listener: handleVariablePattern(null, a)
-                              parsePattern(,, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern(,, isRefutableContext: false)
-                                  parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                    listener: handleVariablePattern(null, a, true)
+                              parsePattern(,, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern(,, PatternContext.assignment)
+                                  parseVariablePattern(,, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(,)
-                                    listener: handleVariablePattern(null, b)
+                                    listener: handleVariablePattern(null, b, true)
                               listener: handleListPattern(2, [, ])
                         parseExpression(=)
                           looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_empty.dart.intertwined.expect
index 765865e..6e5150e 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_empty.dart.intertwined.expect
@@ -46,10 +46,10 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: handleNoTypeArguments([])
-                            parseListPatternSuffix({, isRefutableContext: false)
+                            parseListPatternSuffix({, PatternContext.assignment)
                               rewriteSquareBrackets({)
                                 link([, ])
                                 rewriter()
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_emptyWithWhitespace.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_emptyWithWhitespace.dart.intertwined.expect
index 7f9f607..167ef33 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_emptyWithWhitespace.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_emptyWithWhitespace.dart.intertwined.expect
@@ -46,10 +46,10 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: handleNoTypeArguments([)
-                            parseListPatternSuffix({, isRefutableContext: false)
+                            parseListPatternSuffix({, PatternContext.assignment)
                               listener: handleListPattern(0, [, ])
                         parseExpression(=)
                           looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.expect
index 5aba751..a005029 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.expect
@@ -19,9 +19,9 @@
       beginBlockFunctionBody({)
         handleNoTypeArguments([)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, true)
         handleListPattern(2, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
index a32fef8..130bfe6 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
@@ -46,20 +46,20 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: handleNoTypeArguments([)
-                            parseListPatternSuffix({, isRefutableContext: false)
-                              parsePattern([, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern([, isRefutableContext: false)
-                                  parseVariablePattern([, typeInfo: Instance of 'NoType')
+                            parseListPatternSuffix({, PatternContext.assignment)
+                              parsePattern([, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern([, PatternContext.assignment)
+                                  parseVariablePattern([, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType([)
-                                    listener: handleVariablePattern(null, a)
-                              parsePattern(,, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern(,, isRefutableContext: false)
-                                  parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                    listener: handleVariablePattern(null, a, true)
+                              parsePattern(,, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern(,, PatternContext.assignment)
+                                  parseVariablePattern(,, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(,)
-                                    listener: handleVariablePattern(null, b)
+                                    listener: handleVariablePattern(null, b, true)
                               listener: handleListPattern(2, [, ])
                         parseExpression(=)
                           looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.expect
index bf8cf1d..9cdca2a 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.expect
@@ -25,9 +25,9 @@
           handleType(int, null)
         endTypeArguments(1, <, >)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handleListPattern(2, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
index 024b16b..e4b1685 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
@@ -43,24 +43,24 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseListPatternSuffix(>, isRefutableContext: false)
-                        parsePattern([, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern([, isRefutableContext: false)
-                            parseVariablePattern([, typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(>, PatternContext.declaration)
+                        parsePattern([, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.declaration)
+                            parseVariablePattern([, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType([)
-                              listener: handleVariablePattern(null, a)
-                        parsePattern(,, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(,, isRefutableContext: false)
-                            parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                              listener: handleVariablePattern(null, a, false)
+                        parsePattern(,, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.declaration)
+                            parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(,)
-                              listener: handleVariablePattern(null, b)
+                              listener: handleVariablePattern(null, b, false)
                         listener: handleListPattern(2, [, ])
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_empty.dart.intertwined.expect
index e144134..30f3472 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_empty.dart.intertwined.expect
@@ -43,10 +43,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments([])
-                      parseListPatternSuffix(var, isRefutableContext: false)
+                      parseListPatternSuffix(var, PatternContext.declaration)
                         rewriteSquareBrackets(var)
                           link([, ])
                           rewriter()
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_emptyWithWhitespace.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_emptyWithWhitespace.dart.intertwined.expect
index c07267a..ddb8436 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_emptyWithWhitespace.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_emptyWithWhitespace.dart.intertwined.expect
@@ -43,10 +43,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(var, isRefutableContext: false)
+                      parseListPatternSuffix(var, PatternContext.declaration)
                         listener: handleListPattern(0, [, ])
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.expect
index deb1c8a..8de6776 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.expect
@@ -21,9 +21,9 @@
         endMetadataStar(0)
         handleNoTypeArguments([)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handleListPattern(2, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
index c1cd259..7f4fa2b 100644
--- a/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
@@ -43,20 +43,20 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(var, isRefutableContext: false)
-                        parsePattern([, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern([, isRefutableContext: false)
-                            parseVariablePattern([, typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(var, PatternContext.declaration)
+                        parsePattern([, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.declaration)
+                            parseVariablePattern([, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType([)
-                              listener: handleVariablePattern(null, a)
-                        parsePattern(,, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(,, isRefutableContext: false)
-                            parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                              listener: handleVariablePattern(null, a, false)
+                        parsePattern(,, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.declaration)
+                            parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(,)
-                              listener: handleVariablePattern(null, b)
+                              listener: handleVariablePattern(null, b, false)
                         listener: handleListPattern(2, [, ])
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case.dart.intertwined.expect
index 9bee1bd..21e2fe9 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case.dart.intertwined.expect
@@ -69,20 +69,20 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty.dart.intertwined.expect
index a64a4de..d4972bc 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([])
-                      parseListPatternSuffix(case, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
                         rewriteSquareBrackets(case)
                           link([, ])
                           rewriter()
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty_whitespace.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty_whitespace.dart.intertwined.expect
index 328818b..b581b40 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty_whitespace.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_empty_whitespace.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
                         listener: handleListPattern(0, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_with_type_arguments.dart.intertwined.expect
index ef3375b..6778fca 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_case_with_type_arguments.dart.intertwined.expect
@@ -69,24 +69,24 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseListPatternSuffix(>, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(>, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
                                   parseLiteralInt([)
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_cast.dart.intertwined.expect
index a5ffa1e..1944f7a 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_cast.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_assert.dart.intertwined.expect
index 2baba3e..89df196 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_assert.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_check.dart.intertwined.expect
index 0fbbdd9..ede71b0 100644
--- a/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/list_pattern_inside_null_check.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.expect
index a443956..6c81437 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.expect
@@ -27,12 +27,12 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(?)
           handleType(int, ?)
-          handleVariablePattern(null, _)
+          handleVariablePattern(null, _, false)
           beginBinaryPattern(&&)
             handleIdentifier(double, typeReference)
             handleNoTypeArguments(?)
             handleType(double, ?)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
           endBinaryPattern(&&)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.intertwined.expect
index 1c74567..7f54f3e 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_if_case.dart.intertwined.expect
@@ -61,21 +61,21 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(int, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                       listener: beginBinaryPattern(&&)
-                      parsePattern(&&, precedence: 7, isRefutableContext: true)
-                        parsePrimaryPattern(&&, isRefutableContext: true)
-                          parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                      parsePattern(&&, PatternContext.matching, precedence: 7)
+                        parsePrimaryPattern(&&, PatternContext.matching)
+                          parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                             listener: handleIdentifier(double, typeReference)
                             listener: handleNoTypeArguments(?)
                             listener: handleType(double, ?)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       listener: endBinaryPattern(&&)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.expect
index e37b8ce..aaa22b6 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.expect
@@ -30,18 +30,18 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(&&)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(&&)
               beginBinaryPattern(&&)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
                 handleType(Object, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(&&)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.intertwined.expect
index 71b1314..cc0ed4e 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,30 +69,30 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(&&)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(Object, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(Object, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(&&)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.expect
index a0d09fd..da67e08 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.expect
@@ -30,18 +30,18 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(&&)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(&&)
               beginBinaryPattern(||)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
                 handleType(Object, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(||)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.intertwined.expect
index 3fd4460..de424ac 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,30 +69,30 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(&&)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(Object, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(Object, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(||)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.expect
index 62b3b2a..ea6cae1 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.expect
@@ -30,17 +30,17 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(||)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
                 beginBinaryPattern(&&)
                   handleIdentifier(Object, typeReference)
                   handleNoTypeArguments(?)
                   handleType(Object, ?)
-                  handleVariablePattern(null, _)
+                  handleVariablePattern(null, _, false)
                 endBinaryPattern(&&)
               endBinaryPattern(||)
             endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.intertwined.expect
index 0c70eaf..1d9d713 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_and_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,29 +69,29 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                       listener: beginBinaryPattern(&&)
-                      parsePattern(&&, precedence: 7, isRefutableContext: true)
-                        parsePrimaryPattern(&&, isRefutableContext: true)
-                          parseVariablePattern(&&, typeInfo: Instance of 'SimpleNullableType')
+                      parsePattern(&&, PatternContext.matching, precedence: 7)
+                        parsePrimaryPattern(&&, PatternContext.matching)
+                          parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                             listener: handleIdentifier(Object, typeReference)
                             listener: handleNoTypeArguments(?)
                             listener: handleType(Object, ?)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       listener: endBinaryPattern(&&)
                     listener: endBinaryPattern(||)
                   ensureColon(_)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.expect
index bee0cb6..50919db 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.expect
@@ -27,12 +27,12 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(?)
           handleType(int, ?)
-          handleVariablePattern(null, _)
+          handleVariablePattern(null, _, false)
           beginBinaryPattern(||)
             handleIdentifier(double, typeReference)
             handleNoTypeArguments(?)
             handleType(double, ?)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
           endBinaryPattern(||)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.intertwined.expect
index 270f6af..90a7bfb 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_or_inside_if_case.dart.intertwined.expect
@@ -61,21 +61,21 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(int, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                       listener: beginBinaryPattern(||)
-                      parsePattern(||, precedence: 6, isRefutableContext: true)
-                        parsePrimaryPattern(||, isRefutableContext: true)
-                          parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                      parsePattern(||, PatternContext.matching, precedence: 6)
+                        parsePrimaryPattern(||, PatternContext.matching)
+                          parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                             listener: handleIdentifier(double, typeReference)
                             listener: handleNoTypeArguments(?)
                             listener: handleType(double, ?)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       listener: endBinaryPattern(||)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.expect
index 585ccbd..7de3cea 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.expect
@@ -30,18 +30,18 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(?)
               handleType(int, ?)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginBinaryPattern(||)
                 handleIdentifier(double, typeReference)
                 handleNoTypeArguments(?)
                 handleType(double, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(||)
               beginBinaryPattern(||)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(?)
                 handleType(Object, ?)
-                handleVariablePattern(null, _)
+                handleVariablePattern(null, _, false)
               endBinaryPattern(||)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.intertwined.expect
index 5f60873..bf48544 100644
--- a/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/logical_or_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,30 +69,30 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleNullableType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(?)
                         listener: handleType(int, ?)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(double, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(double, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(||)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleNullableType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleNullableType')
                           listener: handleIdentifier(Object, typeReference)
                           listener: handleNoTypeArguments(?)
                           listener: handleType(Object, ?)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     listener: endBinaryPattern(||)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.expect
index ba77159..0bbb0aa 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.expect
@@ -28,12 +28,12 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handleMapPatternEntry(:, ,)
         beginLiteralString('b')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, true)
         handleMapPatternEntry(:, })
         handleMapPattern(2, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.intertwined.expect
index 0cc0b7b..2258fb0 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_typed_nonEmpty.dart.intertwined.expect
@@ -46,8 +46,8 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: beginTypeArguments(<)
                             listener: handleIdentifier(String, typeReference)
                             listener: handleNoTypeArguments(,)
@@ -56,7 +56,7 @@
                             listener: handleNoTypeArguments(>)
                             listener: handleType(int, null)
                             listener: endTypeArguments(2, <, >)
-                            parseMapPatternSuffix(>, isRefutableContext: false)
+                            parseMapPatternSuffix(>, PatternContext.assignment)
                               parseExpression({)
                                 looksLikeOuterPatternEquals({)
                                   skipOuterPattern({)
@@ -67,11 +67,11 @@
                                         parseSingleLiteralString({)
                                           listener: beginLiteralString('a')
                                           listener: endLiteralString(0, :)
-                              parsePattern(:, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern(:, isRefutableContext: false)
-                                  parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                              parsePattern(:, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern(:, PatternContext.assignment)
+                                  parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(:)
-                                    listener: handleVariablePattern(null, a)
+                                    listener: handleVariablePattern(null, a, true)
                               listener: handleMapPatternEntry(:, ,)
                               parseExpression(,)
                                 looksLikeOuterPatternEquals(,)
@@ -83,11 +83,11 @@
                                         parseSingleLiteralString(,)
                                           listener: beginLiteralString('b')
                                           listener: endLiteralString(0, :)
-                              parsePattern(:, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern(:, isRefutableContext: false)
-                                  parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                              parsePattern(:, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern(:, PatternContext.assignment)
+                                  parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(:)
-                                    listener: handleVariablePattern(null, b)
+                                    listener: handleVariablePattern(null, b, true)
                               listener: handleMapPatternEntry(:, })
                               listener: handleMapPattern(2, {, })
                         parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty.dart.intertwined.expect
index aa5a74b..537011c 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty.dart.intertwined.expect
@@ -55,10 +55,10 @@
                                   looksLikeOuterPatternEquals(()
                                     skipOuterPattern(()
                                   parsePatternAssignment(()
-                                    parsePattern((, precedence: 1, isRefutableContext: false)
-                                      parsePrimaryPattern((, isRefutableContext: false)
+                                    parsePattern((, PatternContext.assignment, precedence: 1)
+                                      parsePrimaryPattern((, PatternContext.assignment)
                                         listener: handleNoTypeArguments({)
-                                        parseMapPatternSuffix((, isRefutableContext: false)
+                                        parseMapPatternSuffix((, PatternContext.assignment)
                                           listener: handleMapPattern(0, {, })
                                     parseExpression(=)
                                       looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty_beginningOfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty_beginningOfStatement.dart.intertwined.expect
index 46b43db..be77126 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty_beginningOfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_empty_beginningOfStatement.dart.intertwined.expect
@@ -43,10 +43,10 @@
                   looksLikeOuterPatternEquals({)
                     skipOuterPattern({)
                   parsePatternAssignment({)
-                    parsePattern({, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern({, isRefutableContext: false)
+                    parsePattern({, PatternContext.assignment, precedence: 1)
+                      parsePrimaryPattern({, PatternContext.assignment)
                         listener: handleNoTypeArguments({)
-                        parseMapPatternSuffix({, isRefutableContext: false)
+                        parseMapPatternSuffix({, PatternContext.assignment)
                           listener: handleMapPattern(0, {, })
                     parseExpression(=)
                       looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.expect
index c20886b..4ece6138 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.expect
@@ -22,12 +22,12 @@
           beginLiteralString('a')
           endLiteralString(0, :)
           handleNoType(:)
-          handleVariablePattern(null, a)
+          handleVariablePattern(null, a, true)
           handleMapPatternEntry(:, ,)
           beginLiteralString('b')
           endLiteralString(0, :)
           handleNoType(:)
-          handleVariablePattern(null, b)
+          handleVariablePattern(null, b, true)
           handleMapPatternEntry(:, })
           handleMapPattern(2, {, })
           handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
index 85484c9..cf8b2e0 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty.dart.intertwined.expect
@@ -55,10 +55,10 @@
                                   looksLikeOuterPatternEquals(()
                                     skipOuterPattern(()
                                   parsePatternAssignment(()
-                                    parsePattern((, precedence: 1, isRefutableContext: false)
-                                      parsePrimaryPattern((, isRefutableContext: false)
+                                    parsePattern((, PatternContext.assignment, precedence: 1)
+                                      parsePrimaryPattern((, PatternContext.assignment)
                                         listener: handleNoTypeArguments({)
-                                        parseMapPatternSuffix((, isRefutableContext: false)
+                                        parseMapPatternSuffix((, PatternContext.assignment)
                                           parseExpression({)
                                             looksLikeOuterPatternEquals({)
                                               skipOuterPattern({)
@@ -69,11 +69,11 @@
                                                     parseSingleLiteralString({)
                                                       listener: beginLiteralString('a')
                                                       listener: endLiteralString(0, :)
-                                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                                            parsePrimaryPattern(:, isRefutableContext: false)
-                                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                                          parsePattern(:, PatternContext.assignment, precedence: 1)
+                                            parsePrimaryPattern(:, PatternContext.assignment)
+                                              parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                                 listener: handleNoType(:)
-                                                listener: handleVariablePattern(null, a)
+                                                listener: handleVariablePattern(null, a, true)
                                           listener: handleMapPatternEntry(:, ,)
                                           parseExpression(,)
                                             looksLikeOuterPatternEquals(,)
@@ -85,11 +85,11 @@
                                                     parseSingleLiteralString(,)
                                                       listener: beginLiteralString('b')
                                                       listener: endLiteralString(0, :)
-                                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                                            parsePrimaryPattern(:, isRefutableContext: false)
-                                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                                          parsePattern(:, PatternContext.assignment, precedence: 1)
+                                            parsePrimaryPattern(:, PatternContext.assignment)
+                                              parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                                 listener: handleNoType(:)
-                                                listener: handleVariablePattern(null, b)
+                                                listener: handleVariablePattern(null, b, true)
                                           listener: handleMapPatternEntry(:, })
                                           listener: handleMapPattern(2, {, })
                                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.expect
index 1d37e82..80d63fd 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.expect
@@ -21,12 +21,12 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handleMapPatternEntry(:, ,)
         beginLiteralString('b')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, true)
         handleMapPatternEntry(:, })
         handleMapPattern(2, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.intertwined.expect
index 3337095..fbe6ce6 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideAssignment_untyped_nonEmpty_beginningOfStatement.dart.intertwined.expect
@@ -43,10 +43,10 @@
                   looksLikeOuterPatternEquals({)
                     skipOuterPattern({)
                   parsePatternAssignment({)
-                    parsePattern({, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern({, isRefutableContext: false)
+                    parsePattern({, PatternContext.assignment, precedence: 1)
+                      parsePrimaryPattern({, PatternContext.assignment)
                         listener: handleNoTypeArguments({)
-                        parseMapPatternSuffix({, isRefutableContext: false)
+                        parseMapPatternSuffix({, PatternContext.assignment)
                           parseExpression({)
                             looksLikeOuterPatternEquals({)
                               skipOuterPattern({)
@@ -57,11 +57,11 @@
                                     parseSingleLiteralString({)
                                       listener: beginLiteralString('a')
                                       listener: endLiteralString(0, :)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.assignment, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.assignment)
+                              parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, true)
                           listener: handleMapPatternEntry(:, ,)
                           parseExpression(,)
                             looksLikeOuterPatternEquals(,)
@@ -73,11 +73,11 @@
                                     parseSingleLiteralString(,)
                                       listener: beginLiteralString('b')
                                       listener: endLiteralString(0, :)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.assignment, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.assignment)
+                              parseVariablePattern(:, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, b)
+                                listener: handleVariablePattern(null, b, true)
                           listener: handleMapPatternEntry(:, })
                           listener: handleMapPattern(2, {, })
                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.expect
index b839413..1efd19a 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.expect
@@ -30,12 +30,12 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleMapPatternEntry(:, ,)
         beginLiteralString('b')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handleMapPatternEntry(:, })
         handleMapPattern(2, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
index 4d7cb65..473cc3d 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_typed_nonEmpty.dart.intertwined.expect
@@ -43,8 +43,8 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(String, typeReference)
                       listener: handleNoTypeArguments(,)
@@ -53,7 +53,7 @@
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(2, <, >)
-                      parseMapPatternSuffix(>, isRefutableContext: false)
+                      parseMapPatternSuffix(>, PatternContext.declaration)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -64,11 +64,11 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handleMapPatternEntry(:, ,)
                         parseExpression(,)
                           looksLikeOuterPatternEquals(,)
@@ -80,11 +80,11 @@
                                   parseSingleLiteralString(,)
                                     listener: beginLiteralString('b')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, b)
+                              listener: handleVariablePattern(null, b, false)
                         listener: handleMapPatternEntry(:, })
                         listener: handleMapPattern(2, {, })
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_empty.dart.intertwined.expect
index 50f3979..8877636 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_empty.dart.intertwined.expect
@@ -43,10 +43,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(var, isRefutableContext: false)
+                      parseMapPatternSuffix(var, PatternContext.declaration)
                         listener: handleMapPattern(0, {, })
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.expect b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.expect
index 4f41088..bdb2c58 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.expect
@@ -23,12 +23,12 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleMapPatternEntry(:, ,)
         beginLiteralString('b')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handleMapPatternEntry(:, })
         handleMapPattern(2, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
index de604f2..b19d2bc 100644
--- a/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_insideDeclaration_untyped_nonEmpty.dart.intertwined.expect
@@ -43,10 +43,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(var, isRefutableContext: false)
+                      parseMapPatternSuffix(var, PatternContext.declaration)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -57,11 +57,11 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handleMapPatternEntry(:, ,)
                         parseExpression(,)
                           looksLikeOuterPatternEquals(,)
@@ -73,11 +73,11 @@
                                   parseSingleLiteralString(,)
                                     listener: beginLiteralString('b')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, b)
+                              listener: handleVariablePattern(null, b, false)
                         listener: handleMapPatternEntry(:, })
                         listener: handleMapPattern(2, {, })
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case.dart.intertwined.expect
index 4d288c1..3635047 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
@@ -102,8 +102,8 @@
                                   parseSingleLiteralString(,)
                                     listener: beginLiteralString('b')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_empty.dart.intertwined.expect
index 4fe0102..4178f51 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_empty.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         listener: handleMapPattern(0, {, })
                   ensureColon(})
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_with_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_with_type_arguments.dart.intertwined.expect
index cbf3d1a..a140d56 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_with_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_case_with_type_arguments.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(String, typeReference)
                       listener: handleNoTypeArguments(,)
@@ -79,7 +79,7 @@
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(2, <, >)
-                      parseMapPatternSuffix(>, isRefutableContext: true)
+                      parseMapPatternSuffix(>, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -90,8 +90,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
@@ -109,8 +109,8 @@
                                   parseSingleLiteralString(,)
                                     listener: beginLiteralString('b')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_cast.dart.intertwined.expect
index ea06d8b..a2632c7 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_cast.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_assert.dart.intertwined.expect
index 5f2a2cd..177c912 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_assert.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_check.dart.intertwined.expect
index a4defa8..47c3489 100644
--- a/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/map_pattern_inside_null_check.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_case.dart.intertwined.expect
index 8eb976c..0edd0ab 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_case.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
index 285cc52..7f82ff4 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
index 3e73904..bf9caa7 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
@@ -56,7 +56,7 @@
               handleNoTypeArguments(()
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, f)
+              handleVariablePattern(var, f, false)
               handleNullAssertPattern(!)
               handlePatternField(:)
               handleObjectPatternFields(1, (, ))
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 4ed032b..4aaea54 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -113,16 +113,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, f)
+                              listener: handleVariablePattern(var, f, false)
                           listener: handleNullAssertPattern(!)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.expect
index b2d7bdb..50e9e05 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(var)
-          handleVariablePattern(var, y)
+          handleVariablePattern(var, y, false)
           handleNullAssertPattern(!)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.intertwined.expect
index e16d340..d946278 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_if_case.dart.intertwined.expect
@@ -61,11 +61,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(var)
-                          listener: handleVariablePattern(var, y)
+                          listener: handleVariablePattern(var, y, false)
                       listener: handleNullAssertPattern(!)
                     ensureCloseParen(!, ()
                     listener: handleParenthesizedCondition((, case, null)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_list_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_list_pattern.dart.intertwined.expect
index 0247763..a94e34b 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_list_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_list_pattern.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_lhs.dart.intertwined.expect
index 90ecf8f..a7426cc 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -79,8 +79,8 @@
                       listener: handleConstantPattern(null)
                     listener: handleNullAssertPattern(!)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_rhs.dart.intertwined.expect
index da8754e..283fedf 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_and_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_lhs.dart.intertwined.expect
index 76c0a53..c01c1a8 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -79,8 +79,8 @@
                       listener: handleConstantPattern(null)
                     listener: handleNullAssertPattern(!)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_rhs.dart.intertwined.expect
index e5037f4..38a236e1 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_map_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_map_pattern.dart.intertwined.expect
index d125efa..b863dd4 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_map_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_map_pattern.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_parenthesized_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_parenthesized_pattern.dart.intertwined.expect
index 8f344ec..b0619fa 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_parenthesized_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_parenthesized_pattern.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.expect
index e5eb56e..f9147db 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.expect
@@ -29,7 +29,7 @@
             beginCaseExpression(case)
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, n)
+              handleVariablePattern(var, n, false)
               handleNullAssertPattern(!)
               handlePatternField(:)
               handleLiteralInt(2)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.intertwined.expect
index fb30f4f..808aa29 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_implicitly_named.dart.intertwined.expect
@@ -69,19 +69,19 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, n)
+                              listener: handleVariablePattern(var, n, false)
                           listener: handleNullAssertPattern(!)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_named.dart.intertwined.expect
index 65e5bce..24214fc 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_named.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         ensureIdentifier((, namedRecordFieldReference)
                           listener: handleIdentifier(n, namedRecordFieldReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
@@ -84,8 +84,8 @@
                             listener: handleConstantPattern(null)
                           listener: handleNullAssertPattern(!)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_unnamed.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_unnamed.dart.intertwined.expect
index af80369..8d8f124 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_unnamed.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_record_pattern_unnamed.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -82,8 +82,8 @@
                             listener: handleConstantPattern(null)
                           listener: handleNullAssertPattern(!)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_case.dart.intertwined.expect
index e6eb394..37406ac 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_case.dart.intertwined.expect
@@ -98,8 +98,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
index 6047b92..43584a9 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
index 91fc022..f70fe79 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
@@ -56,7 +56,7 @@
               handleNoTypeArguments(()
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, f)
+              handleVariablePattern(var, f, false)
               handleNullCheckPattern(?)
               handlePatternField(:)
               handleObjectPatternFields(1, (, ))
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 742ccec..7ff83df 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -113,16 +113,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, f)
+                              listener: handleVariablePattern(var, f, false)
                           listener: handleNullCheckPattern(?)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.expect
index 00e9683..f3fa194 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(var)
-          handleVariablePattern(var, y)
+          handleVariablePattern(var, y, false)
           handleNullCheckPattern(?)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.intertwined.expect
index f28e4e9..c7d077b 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_if_case.dart.intertwined.expect
@@ -61,11 +61,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(var)
-                          listener: handleVariablePattern(var, y)
+                          listener: handleVariablePattern(var, y, false)
                       listener: handleNullCheckPattern(?)
                     ensureCloseParen(?, ()
                     listener: handleParenthesizedCondition((, case, null)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_list_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_list_pattern.dart.intertwined.expect
index 9ad5e5f..6cb1fe2 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_list_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_list_pattern.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression([, 17, false)
                               parseUnaryExpression([, false)
                                 parsePrimary([, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_lhs.dart.intertwined.expect
index 628460e..002765d 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -79,8 +79,8 @@
                       listener: handleConstantPattern(null)
                     listener: handleNullCheckPattern(?)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_rhs.dart.intertwined.expect
index ce7fa20..6f85c7c 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_and_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_lhs.dart.intertwined.expect
index ee4de62..5a3d2d3 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -79,8 +79,8 @@
                       listener: handleConstantPattern(null)
                     listener: handleNullCheckPattern(?)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_rhs.dart.intertwined.expect
index c171ba9..88b40c1 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_map_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_map_pattern.dart.intertwined.expect
index ee5071b..f76bdb1 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_map_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_map_pattern.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_parenthesized_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_parenthesized_pattern.dart.intertwined.expect
index e68c63b..8917aca 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_parenthesized_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_parenthesized_pattern.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.expect
index 675b06e..debfad2 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.expect
@@ -29,7 +29,7 @@
             beginCaseExpression(case)
               handleNoName(()
               handleNoType(var)
-              handleVariablePattern(var, n)
+              handleVariablePattern(var, n, false)
               handleNullCheckPattern(?)
               handlePatternField(:)
               handleLiteralInt(2)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.intertwined.expect
index a967b68..0cc84b3 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_implicitly_named.dart.intertwined.expect
@@ -69,19 +69,19 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, n)
+                              listener: handleVariablePattern(var, n, false)
                           listener: handleNullCheckPattern(?)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_named.dart.intertwined.expect
index f2c778e..29d6e35 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_named.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         ensureIdentifier((, namedRecordFieldReference)
                           listener: handleIdentifier(n, namedRecordFieldReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(:, 17, false)
                               parseUnaryExpression(:, false)
                                 parsePrimary(:, expression)
@@ -84,8 +84,8 @@
                             listener: handleConstantPattern(null)
                           listener: handleNullCheckPattern(?)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_unnamed.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_unnamed.dart.intertwined.expect
index 94fa288..deb6809 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_unnamed.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_record_pattern_unnamed.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -82,8 +82,8 @@
                             listener: handleConstantPattern(null)
                           listener: handleNullCheckPattern(?)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_literal_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_literal_inside_case.dart.intertwined.expect
index fb69cf4..0b112a6 100644
--- a/pkg/front_end/parser_testcases/patterns/null_literal_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_literal_inside_case.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_literal_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_literal_inside_cast.dart.intertwined.expect
index a15d7da..b469529 100644
--- a/pkg/front_end/parser_testcases/patterns/null_literal_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_literal_inside_cast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_literal_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_literal_inside_if_case.dart.intertwined.expect
index ae737f3..5f4ef70 100644
--- a/pkg/front_end/parser_testcases/patterns/null_literal_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_literal_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_assert.dart.intertwined.expect
index fc60c6b..1ccabe5 100644
--- a/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_assert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_check.dart.intertwined.expect
index a9f117e..5fe7a47e 100644
--- a/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_literal_inside_null_check.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/object_prefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_prefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
index 1234770..a05efc1 100644
--- a/pkg/front_end/parser_testcases/patterns/object_prefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_prefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
@@ -44,10 +44,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(Future, isRefutableContext: false)
+                      parseObjectPatternRest(Future, PatternContext.declaration)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, ., Future)
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideAssignment.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideAssignment.dart.intertwined.expect
index 8171b60..e84eae5 100644
--- a/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideAssignment.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideAssignment.dart.intertwined.expect
@@ -47,14 +47,14 @@
                         skipOuterPattern({)
                           skipObjectPatternRest(Future)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: beginTypeArguments(<)
                             listener: handleIdentifier(int, typeReference)
                             listener: handleNoTypeArguments(>)
                             listener: handleType(int, null)
                             listener: endTypeArguments(1, <, >)
-                            parseObjectPatternRest(>, isRefutableContext: false)
+                            parseObjectPatternRest(>, PatternContext.assignment)
                               listener: handleObjectPatternFields(0, (, ))
                             listener: handleObjectPattern(async, ., Future)
                         parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
index e5d58ee..9a0854c8 100644
--- a/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_prefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
@@ -44,14 +44,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: false)
+                      parseObjectPatternRest(>, PatternContext.declaration)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(async, ., Future)
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withTypeArgs_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withTypeArgs_insideDeclaration.dart.intertwined.expect
index 430f2d7..8e56a96 100644
--- a/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withTypeArgs_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withTypeArgs_insideDeclaration.dart.intertwined.expect
@@ -44,14 +44,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: false)
+                      parseObjectPatternRest(>, PatternContext.declaration)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, null, null)
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
index 8380688..5be4c38 100644
--- a/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_unprefixedNamedUnderscore_withoutTypeArgs_insideDeclaration.dart.intertwined.expect
@@ -44,10 +44,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(_, isRefutableContext: false)
+                      parseObjectPatternRest(_, PatternContext.declaration)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(_, null, null)
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/object_unprefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/object_unprefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
index a7b9b5e..505a32f 100644
--- a/pkg/front_end/parser_testcases/patterns/object_unprefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/object_unprefixed_withTypeArgs_insideDeclaration.dart.intertwined.expect
@@ -79,14 +79,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: false)
+                      parseObjectPatternRest(>, PatternContext.declaration)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(C, null, null)
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.expect
index 99e8f880..e65a41e 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.expect
@@ -18,7 +18,7 @@
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.intertwined.expect
index ab37f5d..ecba959 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_insideAssignment.dart.intertwined.expect
@@ -47,14 +47,14 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
-                            parseParenthesizedPatternOrRecordPattern({, isRefutableContext: false)
-                              parsePattern((, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern((, isRefutableContext: false)
-                                  parseVariablePattern((, typeInfo: Instance of 'NoType')
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
+                            parseParenthesizedPatternOrRecordPattern({, PatternContext.assignment)
+                              parsePattern((, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern((, PatternContext.assignment)
+                                  parseVariablePattern((, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(()
-                                    listener: handleVariablePattern(null, a)
+                                    listener: handleVariablePattern(null, a, true)
                               ensureCloseParen(a, ()
                               listener: handleParenthesizedPattern(()
                         parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_insideCase.dart.intertwined.expect
index 6bd438b..8797a44 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_insideCase.dart.intertwined.expect
@@ -67,11 +67,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.expect
index 9433514..ddbadb4 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.intertwined.expect
index 005421f..a95645f 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_insideDeclaration.dart.intertwined.expect
@@ -44,14 +44,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         ensureCloseParen(a, ()
                         listener: handleParenthesizedPattern(()
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_cast.dart.intertwined.expect
index cffc2cf..129eacb 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_cast.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_assert.dart.intertwined.expect
index 4b3656f..52cbc7f 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_assert.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_check.dart.intertwined.expect
index 5af2d83..ad2f816 100644
--- a/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/parenthesized_pattern_inside_null_check.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.expect
index 68e1e4d..e60b59e 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.expect
@@ -22,7 +22,7 @@
         handleNoTypeArguments(()
         handleIdentifier(f, namedArgumentReference)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(:)
         handleObjectPatternFields(1, (, ))
         handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.intertwined.expect
index 9fbb680..f73b7b0 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_final_extractor.dart.intertwined.expect
@@ -45,17 +45,17 @@
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(final, {, final)
-                  parsePattern(final, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(final, isRefutableContext: false)
+                  parsePattern(final, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(final, PatternContext.declaration)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: false)
+                      parseObjectPatternRest(C, PatternContext.declaration)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
                       listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.expect
index f1cb460..d760397 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.expect
@@ -22,7 +22,7 @@
         handleNoTypeArguments(()
         handleIdentifier(f, namedArgumentReference)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(:)
         handleObjectPatternFields(1, (, ))
         handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.intertwined.expect
index 343b018..aadc9546 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_extractor.dart.intertwined.expect
@@ -45,17 +45,17 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: false)
+                      parseObjectPatternRest(C, PatternContext.declaration)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
                       listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.expect
index 0e70c97..5dfe376 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.expect
@@ -21,7 +21,7 @@
         endMetadataStar(0)
         handleNoTypeArguments([)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleListPattern(1, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.intertwined.expect
index 935ec12..b11d0be 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.intertwined.expect
@@ -44,15 +44,15 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(var, isRefutableContext: false)
-                        parsePattern([, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern([, isRefutableContext: false)
-                            parseVariablePattern([, typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(var, PatternContext.declaration)
+                        parsePattern([, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.declaration)
+                            parseVariablePattern([, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType([)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handleListPattern(1, [, ])
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.expect
index 46117ad..b1d68da 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.expect
@@ -23,7 +23,7 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleMapPatternEntry(:, })
         handleMapPattern(1, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.intertwined.expect
index efbc9f3..584da9d 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_map.dart.intertwined.expect
@@ -44,10 +44,10 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(var, isRefutableContext: false)
+                      parseMapPatternSuffix(var, PatternContext.declaration)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -58,11 +58,11 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(:, isRefutableContext: false)
-                            parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                        parsePattern(:, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.declaration)
+                            parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(:)
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handleMapPatternEntry(:, })
                         listener: handleMapPattern(1, {, })
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.expect
index 9433514..ddbadb4 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.intertwined.expect
index 005421f..a95645f 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_parenthesized.dart.intertwined.expect
@@ -44,14 +44,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         ensureCloseParen(a, ()
                         listener: handleParenthesizedPattern(()
                   parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.expect
index 1a8c47a..73a7d53 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleRecordPattern((, 1)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.intertwined.expect
index e79dabe..5bf0080 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_record.dart.intertwined.expect
@@ -44,14 +44,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handlePatternField(null)
                         ensureCloseParen(,, ()
                         listener: handleRecordPattern((, 1)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.expect
index fa819b7..5c3a57c 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.expect
@@ -27,7 +27,7 @@
         handleNoTypeArguments(()
         handleIdentifier(f, namedArgumentReference)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(:)
         handleObjectPatternFields(1, (, ))
         handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.intertwined.expect
index 38c8c17..c2f1ffa 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_extractor.dart.intertwined.expect
@@ -56,17 +56,17 @@
                   skipOuterPattern(final)
                     skipObjectPatternRest(C)
                   parsePatternVariableDeclarationStatement(final, {, final)
-                    parsePattern(final, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(final, isRefutableContext: false)
+                    parsePattern(final, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(final, PatternContext.declaration)
                         listener: handleNoTypeArguments(()
-                        parseObjectPatternRest(C, isRefutableContext: false)
+                        parseObjectPatternRest(C, PatternContext.declaration)
                           ensureIdentifier((, namedArgumentReference)
                             listener: handleIdentifier(f, namedArgumentReference)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.declaration)
+                              parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handlePatternField(:)
                           listener: handleObjectPatternFields(1, (, ))
                         listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.expect
index c223f8a..3a515f4 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.expect
@@ -26,7 +26,7 @@
         endMetadataStar(1)
         handleNoTypeArguments([)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleListPattern(1, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.intertwined.expect
index bdf621f..4a45050 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_list.dart.intertwined.expect
@@ -55,15 +55,15 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
                   skipOuterPattern(final)
                   parsePatternVariableDeclarationStatement(final, {, final)
-                    parsePattern(final, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(final, isRefutableContext: false)
+                    parsePattern(final, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(final, PatternContext.declaration)
                         listener: handleNoTypeArguments([)
-                        parseListPatternSuffix(final, isRefutableContext: false)
-                          parsePattern([, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern([, isRefutableContext: false)
-                              parseVariablePattern([, typeInfo: Instance of 'NoType')
+                        parseListPatternSuffix(final, PatternContext.declaration)
+                          parsePattern([, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern([, PatternContext.declaration)
+                              parseVariablePattern([, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType([)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handleListPattern(1, [, ])
                     parseExpression(=)
                       looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.expect
index e2a2e95..0eb9ae9 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.expect
@@ -28,7 +28,7 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleMapPatternEntry(:, })
         handleMapPattern(1, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.intertwined.expect
index abc339e..63dea9f 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_map.dart.intertwined.expect
@@ -55,10 +55,10 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
                   skipOuterPattern(final)
                   parsePatternVariableDeclarationStatement(final, {, final)
-                    parsePattern(final, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(final, isRefutableContext: false)
+                    parsePattern(final, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(final, PatternContext.declaration)
                         listener: handleNoTypeArguments({)
-                        parseMapPatternSuffix(final, isRefutableContext: false)
+                        parseMapPatternSuffix(final, PatternContext.declaration)
                           parseExpression({)
                             looksLikeOuterPatternEquals({)
                               skipOuterPattern({)
@@ -69,11 +69,11 @@
                                     parseSingleLiteralString({)
                                       listener: beginLiteralString('a')
                                       listener: endLiteralString(0, :)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.declaration)
+                              parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handleMapPatternEntry(:, })
                           listener: handleMapPattern(1, {, })
                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.expect
index 289c8d2..51c7417 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.expect
@@ -25,7 +25,7 @@
           endMetadata(@, null, final)
         endMetadataStar(1)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.intertwined.expect
index e8de68b..b31dea6 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_parenthesized.dart.intertwined.expect
@@ -55,14 +55,14 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
                   skipOuterPattern(final)
                   parsePatternVariableDeclarationStatement(final, {, final)
-                    parsePattern(final, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(final, isRefutableContext: false)
-                        parseParenthesizedPatternOrRecordPattern(final, isRefutableContext: false)
-                          parsePattern((, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern((, isRefutableContext: false)
-                              parseVariablePattern((, typeInfo: Instance of 'NoType')
+                    parsePattern(final, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(final, PatternContext.declaration)
+                        parseParenthesizedPatternOrRecordPattern(final, PatternContext.declaration)
+                          parsePattern((, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern((, PatternContext.declaration)
+                              parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(()
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           ensureCloseParen(a, ()
                           listener: handleParenthesizedPattern(()
                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.expect
index beab512..0b64c13 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.expect
@@ -25,7 +25,7 @@
           endMetadata(@, null, final)
         endMetadataStar(1)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleRecordPattern((, 1)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.intertwined.expect
index b3db92d..f0d647b 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_final_record.dart.intertwined.expect
@@ -55,14 +55,14 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
                   skipOuterPattern(final)
                   parsePatternVariableDeclarationStatement(final, {, final)
-                    parsePattern(final, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(final, isRefutableContext: false)
-                        parseParenthesizedPatternOrRecordPattern(final, isRefutableContext: false)
-                          parsePattern((, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern((, isRefutableContext: false)
-                              parseVariablePattern((, typeInfo: Instance of 'NoType')
+                    parsePattern(final, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(final, PatternContext.declaration)
+                        parseParenthesizedPatternOrRecordPattern(final, PatternContext.declaration)
+                          parsePattern((, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern((, PatternContext.declaration)
+                              parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(()
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handlePatternField(null)
                           ensureCloseParen(,, ()
                           listener: handleRecordPattern((, 1)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.expect
index eb25e24..63859cf 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.expect
@@ -27,7 +27,7 @@
         handleNoTypeArguments(()
         handleIdentifier(f, namedArgumentReference)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(:)
         handleObjectPatternFields(1, (, ))
         handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.intertwined.expect
index b425558..537eefc 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_extractor.dart.intertwined.expect
@@ -56,17 +56,17 @@
                   skipOuterPattern(var)
                     skipObjectPatternRest(C)
                   parsePatternVariableDeclarationStatement(var, {, var)
-                    parsePattern(var, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(var, isRefutableContext: false)
+                    parsePattern(var, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(var, PatternContext.declaration)
                         listener: handleNoTypeArguments(()
-                        parseObjectPatternRest(C, isRefutableContext: false)
+                        parseObjectPatternRest(C, PatternContext.declaration)
                           ensureIdentifier((, namedArgumentReference)
                             listener: handleIdentifier(f, namedArgumentReference)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.declaration)
+                              parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handlePatternField(:)
                           listener: handleObjectPatternFields(1, (, ))
                         listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.expect
index 9863e06..89abea1 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.expect
@@ -26,7 +26,7 @@
         endMetadataStar(1)
         handleNoTypeArguments([)
         handleNoType([)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleListPattern(1, [, ])
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.intertwined.expect
index 6884531..b3babc6 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_list.dart.intertwined.expect
@@ -55,15 +55,15 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                   skipOuterPattern(var)
                   parsePatternVariableDeclarationStatement(var, {, var)
-                    parsePattern(var, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(var, isRefutableContext: false)
+                    parsePattern(var, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(var, PatternContext.declaration)
                         listener: handleNoTypeArguments([)
-                        parseListPatternSuffix(var, isRefutableContext: false)
-                          parsePattern([, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern([, isRefutableContext: false)
-                              parseVariablePattern([, typeInfo: Instance of 'NoType')
+                        parseListPatternSuffix(var, PatternContext.declaration)
+                          parsePattern([, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern([, PatternContext.declaration)
+                              parseVariablePattern([, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType([)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handleListPattern(1, [, ])
                     parseExpression(=)
                       looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.expect
index a5e4077..5698def 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.expect
@@ -28,7 +28,7 @@
         beginLiteralString('a')
         endLiteralString(0, :)
         handleNoType(:)
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleMapPatternEntry(:, })
         handleMapPattern(1, {, })
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.intertwined.expect
index aa22f12..4f9dbfa 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_map.dart.intertwined.expect
@@ -55,10 +55,10 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                   skipOuterPattern(var)
                   parsePatternVariableDeclarationStatement(var, {, var)
-                    parsePattern(var, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(var, isRefutableContext: false)
+                    parsePattern(var, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(var, PatternContext.declaration)
                         listener: handleNoTypeArguments({)
-                        parseMapPatternSuffix(var, isRefutableContext: false)
+                        parseMapPatternSuffix(var, PatternContext.declaration)
                           parseExpression({)
                             looksLikeOuterPatternEquals({)
                               skipOuterPattern({)
@@ -69,11 +69,11 @@
                                     parseSingleLiteralString({)
                                       listener: beginLiteralString('a')
                                       listener: endLiteralString(0, :)
-                          parsePattern(:, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern(:, isRefutableContext: false)
-                              parseVariablePattern(:, typeInfo: Instance of 'NoType')
+                          parsePattern(:, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern(:, PatternContext.declaration)
+                              parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(:)
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handleMapPatternEntry(:, })
                           listener: handleMapPattern(1, {, })
                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.expect
index 3f694a5..f2ab180 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.expect
@@ -25,7 +25,7 @@
           endMetadata(@, null, var)
         endMetadataStar(1)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
         handleNoTypeArguments(;)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.intertwined.expect
index 5a2aa1c..3e51e33 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_parenthesized.dart.intertwined.expect
@@ -55,14 +55,14 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                   skipOuterPattern(var)
                   parsePatternVariableDeclarationStatement(var, {, var)
-                    parsePattern(var, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(var, isRefutableContext: false)
-                        parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                          parsePattern((, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern((, isRefutableContext: false)
-                              parseVariablePattern((, typeInfo: Instance of 'NoType')
+                    parsePattern(var, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(var, PatternContext.declaration)
+                        parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                          parsePattern((, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern((, PatternContext.declaration)
+                              parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(()
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           ensureCloseParen(a, ()
                           listener: handleParenthesizedPattern(()
                     parseExpression(=)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.expect
index 58b0912..bf48b06 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.expect
@@ -25,7 +25,7 @@
           endMetadata(@, null, var)
         endMetadataStar(1)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleRecordPattern((, 1)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.intertwined.expect
index 64161f0..34152dc 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclarationStatement_withMetadata_var_record.dart.intertwined.expect
@@ -55,14 +55,14 @@
                 parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                   skipOuterPattern(var)
                   parsePatternVariableDeclarationStatement(var, {, var)
-                    parsePattern(var, precedence: 1, isRefutableContext: false)
-                      parsePrimaryPattern(var, isRefutableContext: false)
-                        parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                          parsePattern((, precedence: 1, isRefutableContext: false)
-                            parsePrimaryPattern((, isRefutableContext: false)
-                              parseVariablePattern((, typeInfo: Instance of 'NoType')
+                    parsePattern(var, PatternContext.declaration, precedence: 1)
+                      parsePrimaryPattern(var, PatternContext.declaration)
+                        parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                          parsePattern((, PatternContext.declaration, precedence: 1)
+                            parsePrimaryPattern((, PatternContext.declaration)
+                              parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                 listener: handleNoType(()
-                                listener: handleVariablePattern(null, a)
+                                listener: handleVariablePattern(null, a, false)
                           listener: handlePatternField(null)
                           ensureCloseParen(,, ()
                           listener: handleRecordPattern((, 1)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.expect
index cf7b5c5..dce7a8f 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.expect
@@ -21,10 +21,10 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handlePatternField(null)
         handleRecordPattern((, 2)
         beginForInExpression(x)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.intertwined.expect
index 50e3bc5..e469acf 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element.dart.intertwined.expect
@@ -50,20 +50,20 @@
                             skipOuterPattern(var)
                             listener: beginMetadataStar(var)
                             listener: endMetadataStar(0)
-                            parsePattern(var, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(var, isRefutableContext: false)
-                                parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                                  parsePattern((, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern((, isRefutableContext: false)
-                                      parseVariablePattern((, typeInfo: Instance of 'NoType')
+                            parsePattern(var, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(var, PatternContext.declaration)
+                                parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                                  parsePattern((, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern((, PatternContext.declaration)
+                                      parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(()
-                                        listener: handleVariablePattern(null, a)
+                                        listener: handleVariablePattern(null, a, false)
                                   listener: handlePatternField(null)
-                                  parsePattern(,, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern(,, isRefutableContext: false)
-                                      parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                  parsePattern(,, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern(,, PatternContext.declaration)
+                                      parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(,)
-                                        listener: handleVariablePattern(null, b)
+                                        listener: handleVariablePattern(null, b, false)
                                   listener: handlePatternField(null)
                                   ensureCloseParen(b, ()
                                   listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.expect
index d24ff18..b16e31c 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.expect
@@ -26,10 +26,10 @@
           endMetadata(@, null, var)
         endMetadataStar(1)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handlePatternField(null)
         handleRecordPattern((, 2)
         beginForInExpression(x)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.intertwined.expect
index 1193376..96d9a60 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_element_withMetadata.dart.intertwined.expect
@@ -60,20 +60,20 @@
                             listener: endMetadataStar(1)
                           parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
                             skipOuterPattern(var)
-                            parsePattern(var, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(var, isRefutableContext: false)
-                                parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                                  parsePattern((, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern((, isRefutableContext: false)
-                                      parseVariablePattern((, typeInfo: Instance of 'NoType')
+                            parsePattern(var, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(var, PatternContext.declaration)
+                                parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                                  parsePattern((, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern((, PatternContext.declaration)
+                                      parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(()
-                                        listener: handleVariablePattern(null, a)
+                                        listener: handleVariablePattern(null, a, false)
                                   listener: handlePatternField(null)
-                                  parsePattern(,, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern(,, isRefutableContext: false)
-                                      parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                  parsePattern(,, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern(,, PatternContext.declaration)
+                                      parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(,)
-                                        listener: handleVariablePattern(null, b)
+                                        listener: handleVariablePattern(null, b, false)
                                   listener: handlePatternField(null)
                                   ensureCloseParen(b, ()
                                   listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.expect
index 9d6ceb6..988d2c3 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.expect
@@ -21,10 +21,10 @@
           beginMetadataStar(var)
           endMetadataStar(0)
           handleNoType(()
-          handleVariablePattern(null, a)
+          handleVariablePattern(null, a, false)
           handlePatternField(null)
           handleNoType(,)
-          handleVariablePattern(null, b)
+          handleVariablePattern(null, b, false)
           handlePatternField(null)
           handleRecordPattern((, 2)
           beginForInExpression(x)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.intertwined.expect
index d183f13..120e29a 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement.dart.intertwined.expect
@@ -46,20 +46,20 @@
                       skipOuterPattern(var)
                       listener: beginMetadataStar(var)
                       listener: endMetadataStar(0)
-                      parsePattern(var, precedence: 1, isRefutableContext: false)
-                        parsePrimaryPattern(var, isRefutableContext: false)
-                          parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                            parsePattern((, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern((, isRefutableContext: false)
-                                parseVariablePattern((, typeInfo: Instance of 'NoType')
+                      parsePattern(var, PatternContext.declaration, precedence: 1)
+                        parsePrimaryPattern(var, PatternContext.declaration)
+                          parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                            parsePattern((, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern((, PatternContext.declaration)
+                                parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(()
-                                  listener: handleVariablePattern(null, a)
+                                  listener: handleVariablePattern(null, a, false)
                             listener: handlePatternField(null)
-                            parsePattern(,, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(,, isRefutableContext: false)
-                                parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                            parsePattern(,, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(,, PatternContext.declaration)
+                                parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(,)
-                                  listener: handleVariablePattern(null, b)
+                                  listener: handleVariablePattern(null, b, false)
                             listener: handlePatternField(null)
                             ensureCloseParen(b, ()
                             listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.expect
index d5e68a3..e89cc63 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.expect
@@ -26,10 +26,10 @@
             endMetadata(@, null, var)
           endMetadataStar(1)
           handleNoType(()
-          handleVariablePattern(null, a)
+          handleVariablePattern(null, a, false)
           handlePatternField(null)
           handleNoType(,)
-          handleVariablePattern(null, b)
+          handleVariablePattern(null, b, false)
           handlePatternField(null)
           handleRecordPattern((, 2)
           beginForInExpression(x)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.intertwined.expect
index 8a4314b..d715215 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForIn_statement_withMetadata.dart.intertwined.expect
@@ -56,20 +56,20 @@
                       listener: endMetadataStar(1)
                     parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
                       skipOuterPattern(var)
-                      parsePattern(var, precedence: 1, isRefutableContext: false)
-                        parsePrimaryPattern(var, isRefutableContext: false)
-                          parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                            parsePattern((, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern((, isRefutableContext: false)
-                                parseVariablePattern((, typeInfo: Instance of 'NoType')
+                      parsePattern(var, PatternContext.declaration, precedence: 1)
+                        parsePrimaryPattern(var, PatternContext.declaration)
+                          parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                            parsePattern((, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern((, PatternContext.declaration)
+                                parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(()
-                                  listener: handleVariablePattern(null, a)
+                                  listener: handleVariablePattern(null, a, false)
                             listener: handlePatternField(null)
-                            parsePattern(,, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(,, isRefutableContext: false)
-                                parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                            parsePattern(,, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(,, PatternContext.declaration)
+                                parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(,)
-                                  listener: handleVariablePattern(null, b)
+                                  listener: handleVariablePattern(null, b, false)
                             listener: handlePatternField(null)
                             ensureCloseParen(b, ()
                             listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.expect
index 0617d4a..bf4dbda 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.expect
@@ -21,10 +21,10 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handlePatternField(null)
         handleRecordPattern((, 2)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.intertwined.expect
index bc80dba..d4b0d3a 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_element.dart.intertwined.expect
@@ -50,20 +50,20 @@
                             skipOuterPattern(var)
                             listener: beginMetadataStar(var)
                             listener: endMetadataStar(0)
-                            parsePattern(var, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(var, isRefutableContext: false)
-                                parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                                  parsePattern((, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern((, isRefutableContext: false)
-                                      parseVariablePattern((, typeInfo: Instance of 'NoType')
+                            parsePattern(var, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(var, PatternContext.declaration)
+                                parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                                  parsePattern((, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern((, PatternContext.declaration)
+                                      parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(()
-                                        listener: handleVariablePattern(null, a)
+                                        listener: handleVariablePattern(null, a, false)
                                   listener: handlePatternField(null)
-                                  parsePattern(,, precedence: 1, isRefutableContext: false)
-                                    parsePrimaryPattern(,, isRefutableContext: false)
-                                      parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                                  parsePattern(,, PatternContext.declaration, precedence: 1)
+                                    parsePrimaryPattern(,, PatternContext.declaration)
+                                      parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                         listener: handleNoType(,)
-                                        listener: handleVariablePattern(null, b)
+                                        listener: handleVariablePattern(null, b, false)
                                   listener: handlePatternField(null)
                                   ensureCloseParen(b, ()
                                   listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.expect
index 1ec7d1d..026d103 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.expect
@@ -21,10 +21,10 @@
           beginMetadataStar(var)
           endMetadataStar(0)
           handleNoType(()
-          handleVariablePattern(null, a)
+          handleVariablePattern(null, a, false)
           handlePatternField(null)
           handleNoType(,)
-          handleVariablePattern(null, b)
+          handleVariablePattern(null, b, false)
           handlePatternField(null)
           handleRecordPattern((, 2)
           handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.intertwined.expect
index c6de210..8d6ad05 100644
--- a/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/pattern_inForInitializer_statement.dart.intertwined.expect
@@ -46,20 +46,20 @@
                       skipOuterPattern(var)
                       listener: beginMetadataStar(var)
                       listener: endMetadataStar(0)
-                      parsePattern(var, precedence: 1, isRefutableContext: false)
-                        parsePrimaryPattern(var, isRefutableContext: false)
-                          parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                            parsePattern((, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern((, isRefutableContext: false)
-                                parseVariablePattern((, typeInfo: Instance of 'NoType')
+                      parsePattern(var, PatternContext.declaration, precedence: 1)
+                        parsePrimaryPattern(var, PatternContext.declaration)
+                          parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                            parsePattern((, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern((, PatternContext.declaration)
+                                parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(()
-                                  listener: handleVariablePattern(null, a)
+                                  listener: handleVariablePattern(null, a, false)
                             listener: handlePatternField(null)
-                            parsePattern(,, precedence: 1, isRefutableContext: false)
-                              parsePrimaryPattern(,, isRefutableContext: false)
-                                parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                            parsePattern(,, PatternContext.declaration, precedence: 1)
+                              parsePrimaryPattern(,, PatternContext.declaration)
+                                parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                                   listener: handleNoType(,)
-                                  listener: handleVariablePattern(null, b)
+                                  listener: handleVariablePattern(null, b, false)
                             listener: handlePatternField(null)
                             ensureCloseParen(b, ()
                             listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args.dart.intertwined.expect
index 551f0e3..89925ef 100644
--- a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args.dart.intertwined.expect
@@ -94,14 +94,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(async, ., Future)
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_cast.dart.intertwined.expect
index 3dbbf7a..f51f6de 100644
--- a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_cast.dart.intertwined.expect
@@ -94,14 +94,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(async, ., Future)
                     listener: beginAsOperatorType(as)
diff --git a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
index f6e5089..14a3d60 100644
--- a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
@@ -94,14 +94,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(async, ., Future)
                     listener: handleNullAssertPattern(!)
diff --git a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_check.dart.intertwined.expect
index e8cddcc..38506f8 100644
--- a/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/prefixed_extractor_pattern_with_type_args_inside_null_check.dart.intertwined.expect
@@ -94,14 +94,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: beginTypeArguments(<)
                       listener: handleIdentifier(int, typeReference)
                       listener: handleNoTypeArguments(>)
                       listener: handleType(int, null)
                       listener: endTypeArguments(1, <, >)
-                      parseObjectPatternRest(>, isRefutableContext: true)
+                      parseObjectPatternRest(>, PatternContext.matching)
                         listener: handleObjectPatternFields(0, (, ))
                       listener: handleObjectPattern(async, ., Future)
                     listener: handleNullCheckPattern(?)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_empty.dart.intertwined.expect
index 48b0010..7d5d679 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_empty.dart.intertwined.expect
@@ -46,8 +46,8 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
                             listener: handleRecordPattern((, 0)
                         parseExpression(=)
                           looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.expect b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.expect
index be279f6..bb4b783 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.expect
@@ -18,7 +18,7 @@
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handlePatternField(null)
         handleRecordPattern((, 1)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.intertwined.expect
index e81e57a..203d542 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_oneField.dart.intertwined.expect
@@ -46,14 +46,14 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
-                            parseParenthesizedPatternOrRecordPattern({, isRefutableContext: false)
-                              parsePattern((, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern((, isRefutableContext: false)
-                                  parseVariablePattern((, typeInfo: Instance of 'NoType')
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
+                            parseParenthesizedPatternOrRecordPattern({, PatternContext.assignment)
+                              parsePattern((, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern((, PatternContext.assignment)
+                                  parseVariablePattern((, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(()
-                                    listener: handleVariablePattern(null, a)
+                                    listener: handleVariablePattern(null, a, true)
                               listener: handlePatternField(null)
                               ensureCloseParen(,, ()
                               listener: handleRecordPattern((, 1)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.expect b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.expect
index b095b19..f2d965d 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.expect
@@ -18,10 +18,10 @@
       handleAsyncModifier(null, null)
       beginBlockFunctionBody({)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, true)
         handlePatternField(null)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, true)
         handlePatternField(null)
         handleRecordPattern((, 2)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.intertwined.expect
index f47a51b..2a87ab4 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideAssignment_twoFields.dart.intertwined.expect
@@ -46,20 +46,20 @@
                       looksLikeOuterPatternEquals({)
                         skipOuterPattern({)
                       parsePatternAssignment({)
-                        parsePattern({, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern({, isRefutableContext: false)
-                            parseParenthesizedPatternOrRecordPattern({, isRefutableContext: false)
-                              parsePattern((, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern((, isRefutableContext: false)
-                                  parseVariablePattern((, typeInfo: Instance of 'NoType')
+                        parsePattern({, PatternContext.assignment, precedence: 1)
+                          parsePrimaryPattern({, PatternContext.assignment)
+                            parseParenthesizedPatternOrRecordPattern({, PatternContext.assignment)
+                              parsePattern((, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern((, PatternContext.assignment)
+                                  parseVariablePattern((, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(()
-                                    listener: handleVariablePattern(null, a)
+                                    listener: handleVariablePattern(null, a, true)
                               listener: handlePatternField(null)
-                              parsePattern(,, precedence: 1, isRefutableContext: false)
-                                parsePrimaryPattern(,, isRefutableContext: false)
-                                  parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                              parsePattern(,, PatternContext.assignment, precedence: 1)
+                                parsePrimaryPattern(,, PatternContext.assignment)
+                                  parseVariablePattern(,, PatternContext.assignment, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(,)
-                                    listener: handleVariablePattern(null, b)
+                                    listener: handleVariablePattern(null, b, true)
                               listener: handlePatternField(null)
                               ensureCloseParen(b, ()
                               listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_empty.dart.intertwined.expect
index 8dbab78..a3ce115 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_empty.dart.intertwined.expect
@@ -43,8 +43,8 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
                       listener: handleRecordPattern((, 0)
                   parseExpression(=)
                     looksLikeOuterPatternEquals(=)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.expect b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.expect
index 703a2ce..9abd848 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleRecordPattern((, 1)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.intertwined.expect
index d819fd5..e92604b 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_oneField.dart.intertwined.expect
@@ -43,14 +43,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handlePatternField(null)
                         ensureCloseParen(,, ()
                         listener: handleRecordPattern((, 1)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.expect b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.expect
index 3a8bcc8..979dacc 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.expect
@@ -20,10 +20,10 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, a)
+        handleVariablePattern(null, a, false)
         handlePatternField(null)
         handleNoType(,)
-        handleVariablePattern(null, b)
+        handleVariablePattern(null, b, false)
         handlePatternField(null)
         handleRecordPattern((, 2)
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.intertwined.expect
index 05ff7af..0e8675c 100644
--- a/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_insideDeclaration_twoFields.dart.intertwined.expect
@@ -43,20 +43,20 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, a)
+                              listener: handleVariablePattern(null, a, false)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern(,, isRefutableContext: false)
-                            parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                        parsePattern(,, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.declaration)
+                            parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(,)
-                              listener: handleVariablePattern(null, b)
+                              listener: handleVariablePattern(null, b, false)
                         listener: handlePatternField(null)
                         ensureCloseParen(b, ()
                         listener: handleRecordPattern((, 2)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case.dart.intertwined.expect
index de50760..c6c3abf 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -81,8 +81,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_empty.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_empty.dart.intertwined.expect
index cdcb8ff..3bfec97 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_empty.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_empty.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleRecordPattern((, 0)
                   ensureColon())
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_singleton.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_singleton.dart.intertwined.expect
index b0f156f..8cdd2f8 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_singleton.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_case_singleton.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_cast.dart.intertwined.expect
index a4805ec3d..690bdef 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_cast.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -81,8 +81,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_assert.dart.intertwined.expect
index 829ec4a..d1221f2 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_assert.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -81,8 +81,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_check.dart.intertwined.expect
index 7f54fad..2b5e21c 100644
--- a/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/record_pattern_inside_null_check.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression((, 17, false)
                               parseUnaryExpression((, false)
                                 parsePrimary((, expression)
@@ -81,8 +81,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleConstantPattern(null)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_equal.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_equal.dart.intertwined.expect
index cb84638..3002c02 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_equal.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_equal.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(==, 12, false)
                         parseUnaryExpression(==, false)
                           parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than.dart.intertwined.expect
index 7cf536a..8f4d7bf 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(>, 12, false)
                         parseUnaryExpression(>, false)
                           parsePrimary(>, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than_or_equal.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than_or_equal.dart.intertwined.expect
index cbbc975..68631b0 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than_or_equal.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_greater_than_or_equal.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(>=, 12, false)
                         parseUnaryExpression(>=, false)
                           parsePrimary(>=, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than.dart.intertwined.expect
index 1628e75..83a89f5 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(<, 12, false)
                         parseUnaryExpression(<, false)
                           parsePrimary(<, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than_or_equal.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than_or_equal.dart.intertwined.expect
index 8d31a4d..e3da00c 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than_or_equal.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_less_than_or_equal.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(<=, 12, false)
                         parseUnaryExpression(<=, false)
                           parsePrimary(<=, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_case_not_equal.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_case_not_equal.dart.intertwined.expect
index 735f72b..0a45d3b 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_case_not_equal.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_case_not_equal.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(!=, 12, false)
                         parseUnaryExpression(!=, false)
                           parsePrimary(!=, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
index db803df..381db96 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
@@ -113,14 +113,14 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_if_case.dart.intertwined.expect
index d816943..b390bac 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(==, 12, false)
                           parseUnaryExpression(==, false)
                             parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_list_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_list_pattern.dart.intertwined.expect
index 5f599d5..76412b1 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_list_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_list_pattern.dart.intertwined.expect
@@ -69,12 +69,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_lhs.dart.intertwined.expect
index 9dd0282..bfe462b 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(==, 12, false)
                         parseUnaryExpression(==, false)
                           parsePrimary(==, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleRelationalPattern(==)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_rhs.dart.intertwined.expect
index 627c28e..9f3bafc 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_and_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(==, 12, false)
                           parseUnaryExpression(==, false)
                             parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_lhs.dart.intertwined.expect
index 640530e..32073fb 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(==, 12, false)
                         parseUnaryExpression(==, false)
                           parsePrimary(==, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleRelationalPattern(==)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_rhs.dart.intertwined.expect
index 029c43a..3423655 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,8 +78,8 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(==, 12, false)
                           parseUnaryExpression(==, false)
                             parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_map_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_map_pattern.dart.intertwined.expect
index e0f887a..f6b19d4 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_map_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_map_pattern.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,8 +83,8 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_parenthesized_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_parenthesized_pattern.dart.intertwined.expect
index 9cf1de7..485d5e2 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_parenthesized_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_parenthesized_pattern.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_named.dart.intertwined.expect
index 0f7f8ab..8e1307a 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_named.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         ensureIdentifier((, namedRecordFieldReference)
                           listener: handleIdentifier(n, namedRecordFieldReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
@@ -83,8 +83,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleRelationalPattern(==)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_unnamed.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_unnamed.dart.intertwined.expect
index 4c864e0..2fcd439 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_unnamed.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_record_pattern_unnamed.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
@@ -81,8 +81,8 @@
                                     listener: handleLiteralInt(1)
                             listener: handleRelationalPattern(==)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.expect b/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.expect
index defb798..0cfb59d 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.expect
@@ -140,14 +140,14 @@
             beginCaseExpression(case)
               handleNoTypeArguments([)
               handleNoType(var)
-              handleVariablePattern(var, x)
+              handleVariablePattern(var, x, false)
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
             beginCaseExpression(case)
               handleNoTypeArguments([)
               handleNoType(final)
-              handleVariablePattern(final, x)
+              handleVariablePattern(final, x, false)
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
@@ -156,21 +156,21 @@
               handleIdentifier(List, typeReference)
               handleNoTypeArguments(x)
               handleType(List, null)
-              handleVariablePattern(null, x)
+              handleVariablePattern(null, x, false)
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
             beginCaseExpression(case)
               handleNoTypeArguments([)
               handleNoType(...)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
             beginCaseExpression(case)
               handleNoTypeArguments([)
               handleNoType(()
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleParenthesizedPattern(()
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
@@ -179,7 +179,7 @@
               handleNoTypeArguments([)
               handleNoTypeArguments([)
               handleNoType([)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleListPattern(1, [, ])
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
diff --git a/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.intertwined.expect
index fd44329..314939f 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_subpatternStartingTokens.dart.intertwined.expect
@@ -66,12 +66,12 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(==, 12, false)
                               parseUnaryExpression(==, false)
                                 parsePrimary(==, expression)
@@ -84,12 +84,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(!=, 12, false)
                               parseUnaryExpression(!=, false)
                                 parsePrimary(!=, expression)
@@ -102,12 +102,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(<, 12, false)
                               parseUnaryExpression(<, false)
                                 parsePrimary(<, expression)
@@ -120,12 +120,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(>, 12, false)
                               parseUnaryExpression(>, false)
                                 parsePrimary(>, expression)
@@ -138,12 +138,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(<=, 12, false)
                               parseUnaryExpression(<=, false)
                                 parsePrimary(<=, expression)
@@ -156,12 +156,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(>=, 12, false)
                               parseUnaryExpression(>=, false)
                                 parsePrimary(>=, expression)
@@ -174,12 +174,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -192,12 +192,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -210,12 +210,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -228,12 +228,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -246,12 +246,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -264,12 +264,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -282,12 +282,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -302,12 +302,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(..., 17, false)
                               parseUnaryExpression(..., false)
                                 parsePrimary(..., expression)
@@ -327,12 +327,12 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             parsePrecedenceExpression(const, 17, false)
                               parseUnaryExpression(const, false)
                                 parsePrimary(const, expression)
@@ -356,80 +356,80 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, x)
+                              listener: handleVariablePattern(var, x, false)
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(final)
-                              listener: handleVariablePattern(final, x)
+                              listener: handleVariablePattern(final, x, false)
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'SimpleType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(List, typeReference)
                               listener: handleNoTypeArguments(x)
                               listener: handleType(List, null)
-                              listener: handleVariablePattern(null, x)
+                              listener: handleVariablePattern(null, x, false)
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(...)
-                              listener: handleVariablePattern(null, _)
+                              listener: handleVariablePattern(null, _, false)
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseParenthesizedPatternOrRecordPattern(..., isRefutableContext: true)
-                              parsePattern((, precedence: 1, isRefutableContext: true)
-                                parsePrimaryPattern((, isRefutableContext: true)
-                                  parseVariablePattern((, typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseParenthesizedPatternOrRecordPattern(..., PatternContext.matching)
+                              parsePattern((, PatternContext.matching, precedence: 1)
+                                parsePrimaryPattern((, PatternContext.matching)
+                                  parseVariablePattern((, PatternContext.matching, typeInfo: Instance of 'NoType')
                                     listener: handleNoType(()
-                                    listener: handleVariablePattern(null, _)
+                                    listener: handleVariablePattern(null, _, false)
                               ensureCloseParen(_, ()
                               listener: handleParenthesizedPattern(()
                         listener: handleRestPattern(..., true)
@@ -438,19 +438,19 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             listener: handleNoTypeArguments([)
-                            parseListPatternSuffix(..., isRefutableContext: true)
-                              parsePattern([, precedence: 1, isRefutableContext: true)
-                                parsePrimaryPattern([, isRefutableContext: true)
-                                  parseVariablePattern([, typeInfo: Instance of 'NoType')
+                            parseListPatternSuffix(..., PatternContext.matching)
+                              parsePattern([, PatternContext.matching, precedence: 1)
+                                parsePrimaryPattern([, PatternContext.matching)
+                                  parseVariablePattern([, PatternContext.matching, typeInfo: Instance of 'NoType')
                                     listener: handleNoType([)
-                                    listener: handleVariablePattern(null, _)
+                                    listener: handleVariablePattern(null, _, false)
                               listener: handleListPattern(1, [, ])
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
@@ -458,14 +458,14 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             listener: handleNoTypeArguments([])
-                            parseListPatternSuffix(..., isRefutableContext: true)
+                            parseListPatternSuffix(..., PatternContext.matching)
                               rewriteSquareBrackets(...)
                                 link([, ])
                                 rewriter()
@@ -476,18 +476,18 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             listener: beginTypeArguments(<)
                             listener: handleIdentifier(int, typeReference)
                             listener: handleNoTypeArguments(>)
                             listener: handleType(int, null)
                             listener: endTypeArguments(1, <, >)
-                            parseListPatternSuffix(>, isRefutableContext: true)
+                            parseListPatternSuffix(>, PatternContext.matching)
                               rewriteSquareBrackets(>)
                                 link([, ])
                                 rewriter()
@@ -498,14 +498,14 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             listener: handleNoTypeArguments({)
-                            parseMapPatternSuffix(..., isRefutableContext: true)
+                            parseMapPatternSuffix(..., PatternContext.matching)
                               listener: handleMapPattern(0, {, })
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
@@ -513,14 +513,14 @@
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
                             listener: handleNoTypeArguments(()
-                            parseObjectPatternRest(List, isRefutableContext: true)
+                            parseObjectPatternRest(List, PatternContext.matching)
                               listener: handleObjectPatternFields(0, (, ))
                             listener: handleObjectPattern(List, null, null)
                         listener: handleRestPattern(..., true)
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.expect b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.expect
index fcea1c3..2c55dc7 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.expect
@@ -27,7 +27,7 @@
             beginCaseExpression(case)
               handleNoTypeArguments([)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
               handleRestPattern(..., true)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.intertwined.expect
index 276cfe3..ab2f880 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideList.dart.intertwined.expect
@@ -66,15 +66,15 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'NoType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, y)
+                              listener: handleVariablePattern(var, y, false)
                         listener: handleRestPattern(..., true)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.expect b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.expect
index 19fc18b..3acf44c 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.expect
@@ -27,7 +27,7 @@
             beginCaseExpression(case)
               handleNoTypeArguments({)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
               handleRestPattern(..., true)
               handleMapPattern(1, {, })
             endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.intertwined.expect
index ac15736..069304b 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withSubpattern_insideMap.dart.intertwined.expect
@@ -66,15 +66,15 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
-                        parsePattern(..., precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(..., isRefutableContext: true)
-                            parseVariablePattern(..., typeInfo: Instance of 'NoType')
+                      parseMapPatternSuffix(case, PatternContext.matching)
+                        parsePattern(..., PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(..., PatternContext.matching)
+                            parseVariablePattern(..., PatternContext.matching, typeInfo: Instance of 'NoType')
                               listener: handleNoType(var)
-                              listener: handleVariablePattern(var, y)
+                              listener: handleVariablePattern(var, y, false)
                         listener: handleRestPattern(..., true)
                         listener: handleMapPattern(1, {, })
                   ensureColon(})
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideList.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideList.dart.intertwined.expect
index ffc1408..1b60eb7 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideList.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideList.dart.intertwined.expect
@@ -66,10 +66,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
+                      parseListPatternSuffix(case, PatternContext.matching)
                         listener: handleRestPattern(..., false)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
diff --git a/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideMap.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideMap.dart.intertwined.expect
index 66ad0ad..32012e5 100644
--- a/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideMap.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/rest_withoutSubpattern_insideMap.dart.intertwined.expect
@@ -66,10 +66,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         listener: handleRestPattern(..., false)
                         listener: handleMapPattern(1, {, })
                   ensureColon(})
diff --git a/pkg/front_end/parser_testcases/patterns/string_literal_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/string_literal_inside_case.dart.intertwined.expect
index 7faeb94..e30b204 100644
--- a/pkg/front_end/parser_testcases/patterns/string_literal_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/string_literal_inside_case.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/string_literal_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/string_literal_inside_cast.dart.intertwined.expect
index 5099fa2..8bcf0e4 100644
--- a/pkg/front_end/parser_testcases/patterns/string_literal_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/string_literal_inside_cast.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/string_literal_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/string_literal_inside_if_case.dart.intertwined.expect
index 2f58582..7a8c47d 100644
--- a/pkg/front_end/parser_testcases/patterns/string_literal_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/string_literal_inside_if_case.dart.intertwined.expect
@@ -61,8 +61,8 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
                         parsePrecedenceExpression(case, 17, false)
                           parseUnaryExpression(case, false)
                             parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_assert.dart.intertwined.expect
index de1a790..27fd80b 100644
--- a/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_assert.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_check.dart.intertwined.expect
index d37214c..6f95e53 100644
--- a/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/string_literal_inside_null_check.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.expect
index 63a1deb..35746eb 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleLiteralBool(true)
             handleLiteralInt(0)
           endSwitchExpressionCase(when, =>, 0)
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.intertwined.expect
index 2856e27..35f7578 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_guarded.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       parseExpression(when)
                         looksLikeOuterPatternEquals(when)
                           skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.expect
index 47a894c..6d77bd1 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleLiteralInt(0)
           endSwitchExpressionCase(null, =>, 0)
         endSwitchExpressionBlock(1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.intertwined.expect
index c49a163..950bdcf 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_noTrailingComma.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       ensureFunctionArrow(_)
                       parseExpression(=>)
                         looksLikeOuterPatternEquals(=>)
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.expect
index 47a894c..6d77bd1 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.expect
@@ -25,7 +25,7 @@
         beginSwitchExpressionBlock({)
           beginSwitchExpressionCase()
             handleNoType({)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleLiteralInt(0)
           endSwitchExpressionCase(null, =>, 0)
         endSwitchExpressionBlock(1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.intertwined.expect
index c49a163..950bdcf 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_onePattern_trailingComma.dart.intertwined.expect
@@ -68,11 +68,11 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'NoType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType({)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       ensureFunctionArrow(_)
                       parseExpression(=>)
                         looksLikeOuterPatternEquals(=>)
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.expect
index cb8b925..af8753f 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.expect
@@ -27,12 +27,12 @@
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(_)
             handleType(int, null)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleLiteralInt(0)
           endSwitchExpressionCase(null, =>, 0)
           beginSwitchExpressionCase()
             handleNoType(,)
-            handleVariablePattern(null, _)
+            handleVariablePattern(null, _, false)
             handleLiteralInt(1)
           endSwitchExpressionCase(null, =>, 1)
         endSwitchExpressionBlock(2, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.intertwined.expect
index 7eb93b3..b0854f7 100644
--- a/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/switchExpression_twoPatterns.dart.intertwined.expect
@@ -68,13 +68,13 @@
                       ensureBlock(), null, switch expression)
                       listener: beginSwitchExpressionBlock({)
                       listener: beginSwitchExpressionCase()
-                      parsePattern({, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern({, isRefutableContext: true)
-                          parseVariablePattern({, typeInfo: Instance of 'SimpleType')
+                      parsePattern({, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern({, PatternContext.matching)
+                          parseVariablePattern({, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                             listener: handleIdentifier(int, typeReference)
                             listener: handleNoTypeArguments(_)
                             listener: handleType(int, null)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       ensureFunctionArrow(_)
                       parseExpression(=>)
                         looksLikeOuterPatternEquals(=>)
@@ -86,11 +86,11 @@
                                 listener: handleLiteralInt(0)
                       listener: endSwitchExpressionCase(null, =>, 0)
                       listener: beginSwitchExpressionCase()
-                      parsePattern(,, precedence: 1, isRefutableContext: true)
-                        parsePrimaryPattern(,, isRefutableContext: true)
-                          parseVariablePattern(,, typeInfo: Instance of 'NoType')
+                      parsePattern(,, PatternContext.matching, precedence: 1)
+                        parsePrimaryPattern(,, PatternContext.matching)
+                          parseVariablePattern(,, PatternContext.matching, typeInfo: Instance of 'NoType')
                             listener: handleNoType(,)
-                            listener: handleVariablePattern(null, _)
+                            listener: handleVariablePattern(null, _, false)
                       ensureFunctionArrow(_)
                       parseExpression(=>)
                         looksLikeOuterPatternEquals(=>)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.expect
index 596e195..3ae67e7 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.intertwined.expect
index 25a5e4d..0b7e427 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_case.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                   ensureColon(y)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.expect
index fca4e04..d943a81 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.intertwined.expect
index 6044f02..1ced8dc 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_cast.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.expect
index e78ddaf..512b27f 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.expect
@@ -27,7 +27,7 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(y)
           handleType(int, null)
-          handleVariablePattern(final, y)
+          handleVariablePattern(final, y, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.intertwined.expect
index 35abab9..1a74858 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_if_case.dart.intertwined.expect
@@ -61,13 +61,13 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(y)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(final, y)
+                          listener: handleVariablePattern(final, y, false)
                     ensureCloseParen(y, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.expect
index 6910183..0fa4b1f 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.intertwined.expect
index 107cb0e..de23b2a 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_assert.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.expect
index 62bae9d..52913ac 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(final, y)
+              handleVariablePattern(final, y, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.intertwined.expect
index 4671c05..aaef33a 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_final_variable_inside_null_check.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, y)
+                        listener: handleVariablePattern(final, y, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.expect
index 3417c20..d0e64e5 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(null, y)
+              handleVariablePattern(null, y, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.intertwined.expect
index b89ab98..f8e913b 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_case.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, y)
+                        listener: handleVariablePattern(null, y, false)
                   ensureColon(y)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.expect
index 5e0206f..1a6a8be 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(null, y)
+              handleVariablePattern(null, y, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.intertwined.expect
index 39b50ec..b33ade9 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_cast.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, y)
+                        listener: handleVariablePattern(null, y, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.expect
index 21dc891..8b813be 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.expect
@@ -27,7 +27,7 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(y)
           handleType(int, null)
-          handleVariablePattern(null, y)
+          handleVariablePattern(null, y, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.intertwined.expect
index 4f85e86..eefd064 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_if_case.dart.intertwined.expect
@@ -61,13 +61,13 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(y)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(null, y)
+                          listener: handleVariablePattern(null, y, false)
                     ensureCloseParen(y, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.expect
index e23efb3..a76a058 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(null, y)
+              handleVariablePattern(null, y, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.intertwined.expect
index b5b9792..94ea139 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_assert.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, y)
+                        listener: handleVariablePattern(null, y, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.expect
index 8ccc145..86abef0 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(y)
               handleType(int, null)
-              handleVariablePattern(null, y)
+              handleVariablePattern(null, y, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.intertwined.expect
index 0cbed80..0f6d547 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_inside_null_check.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, y)
+                        listener: handleVariablePattern(null, y, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.expect
index 60ac9d5..a864098 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.intertwined.expect
index 64b6ca8..475809c 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_case.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                   ensureColon(as)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.expect
index 826a4e5..46f0561 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.intertwined.expect
index b46724d..5e72bfd 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_cast.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.expect
index 8f830f6..925258e 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.expect
@@ -58,7 +58,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handlePatternField(:)
               handleObjectPatternFields(1, (, ))
               handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.intertwined.expect
index fc1c039..2748738 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern.dart.intertwined.expect
@@ -113,19 +113,19 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         ensureIdentifier((, namedArgumentReference)
                           listener: handleIdentifier(f, namedArgumentReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'SimpleType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
                       listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.expect
index bdad397..34d0911 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.expect
@@ -58,7 +58,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handlePatternField(:)
               handleObjectPatternFields(1, (, ))
               handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 1be356f..953c119 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -113,18 +113,18 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments(()
-                      parseObjectPatternRest(C, isRefutableContext: true)
+                      parseObjectPatternRest(C, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'SimpleType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handlePatternField(:)
                         listener: handleObjectPatternFields(1, (, ))
                       listener: handleObjectPattern(C, null, null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.expect
index fcf10b5..9a152a0 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.expect
@@ -27,7 +27,7 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(as)
           handleType(int, null)
-          handleVariablePattern(null, as)
+          handleVariablePattern(null, as, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.intertwined.expect
index 375ff7b..2671e52 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_if_case.dart.intertwined.expect
@@ -61,13 +61,13 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(as)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(null, as)
+                          listener: handleVariablePattern(null, as, false)
                     ensureCloseParen(as, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.expect
index fc6c843..d16a8fa 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.expect
@@ -31,7 +31,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleListPattern(1, [, ])
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.intertwined.expect
index a8cc4ae..ebb66bf 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_list_pattern.dart.intertwined.expect
@@ -69,17 +69,17 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments([)
-                      parseListPatternSuffix(case, isRefutableContext: true)
-                        parsePattern([, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern([, isRefutableContext: true)
-                            parseVariablePattern([, typeInfo: Instance of 'SimpleType')
+                      parseListPatternSuffix(case, PatternContext.matching)
+                        parsePattern([, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern([, PatternContext.matching)
+                            parseVariablePattern([, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handleListPattern(1, [, ])
                   ensureColon(])
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.expect
index 25bc0ff..fc33a01 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               beginBinaryPattern(&&)
                 handleLiteralInt(2)
                 handleConstantPattern(null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.intertwined.expect
index 8fc5f36..899c2d5 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_lhs.dart.intertwined.expect
@@ -69,16 +69,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
                         parsePrecedenceExpression(&&, 17, false)
                           parseUnaryExpression(&&, false)
                             parsePrimary(&&, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.expect
index fb75ae0..2e506d2 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.expect
@@ -33,7 +33,7 @@
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(as)
                 handleType(int, null)
-                handleVariablePattern(null, as)
+                handleVariablePattern(null, as, false)
               endBinaryPattern(&&)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.intertwined.expect
index 5d1d765..b544dd4 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_and_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,13 +78,13 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(&&)
-                    parsePattern(&&, precedence: 7, isRefutableContext: true)
-                      parsePrimaryPattern(&&, isRefutableContext: true)
-                        parseVariablePattern(&&, typeInfo: Instance of 'SimpleType')
+                    parsePattern(&&, PatternContext.matching, precedence: 7)
+                      parsePrimaryPattern(&&, PatternContext.matching)
+                        parseVariablePattern(&&, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(as)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(null, as)
+                          listener: handleVariablePattern(null, as, false)
                     listener: endBinaryPattern(&&)
                   ensureColon(as)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.expect
index d6ddd32..9d29ee1 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               beginBinaryPattern(||)
                 handleLiteralInt(2)
                 handleConstantPattern(null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.intertwined.expect
index dd78502..44d90bb 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_lhs.dart.intertwined.expect
@@ -69,16 +69,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
                         parsePrecedenceExpression(||, 17, false)
                           parseUnaryExpression(||, false)
                             parsePrimary(||, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.expect
index 7efdc8b..0e5df4a 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.expect
@@ -33,7 +33,7 @@
                 handleIdentifier(int, typeReference)
                 handleNoTypeArguments(as)
                 handleType(int, null)
-                handleVariablePattern(null, as)
+                handleVariablePattern(null, as, false)
               endBinaryPattern(||)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.intertwined.expect
index c878c9d..1eae7e2 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_logical_or_rhs.dart.intertwined.expect
@@ -69,8 +69,8 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       parsePrecedenceExpression(case, 17, false)
                         parseUnaryExpression(case, false)
                           parsePrimary(case, expression)
@@ -78,13 +78,13 @@
                               listener: handleLiteralInt(1)
                       listener: handleConstantPattern(null)
                     listener: beginBinaryPattern(||)
-                    parsePattern(||, precedence: 6, isRefutableContext: true)
-                      parsePrimaryPattern(||, isRefutableContext: true)
-                        parseVariablePattern(||, typeInfo: Instance of 'SimpleType')
+                    parsePattern(||, PatternContext.matching, precedence: 6)
+                      parsePrimaryPattern(||, PatternContext.matching)
+                        parseVariablePattern(||, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(as)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(null, as)
+                          listener: handleVariablePattern(null, as, false)
                     listener: endBinaryPattern(||)
                   ensureColon(as)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.expect
index cc0d616..3aa8245 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.expect
@@ -33,7 +33,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleMapPatternEntry(:, })
               handleMapPattern(1, {, })
             endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.intertwined.expect
index 7793305..c0d3568 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_map_pattern.dart.intertwined.expect
@@ -69,10 +69,10 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
                       listener: handleNoTypeArguments({)
-                      parseMapPatternSuffix(case, isRefutableContext: true)
+                      parseMapPatternSuffix(case, PatternContext.matching)
                         parseExpression({)
                           looksLikeOuterPatternEquals({)
                             skipOuterPattern({)
@@ -83,13 +83,13 @@
                                   parseSingleLiteralString({)
                                     listener: beginLiteralString('a')
                                     listener: endLiteralString(0, :)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'SimpleType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handleMapPatternEntry(:, })
                         listener: handleMapPattern(1, {, })
                   ensureColon(})
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.expect
index 2b033bc24..f5c3d10 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.intertwined.expect
index 09057e0..8abffc7 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_assert.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.expect
index 348b602..c8abc1d 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.intertwined.expect
index 4d3b2fd..21d23b7 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_null_check.dart.intertwined.expect
@@ -69,13 +69,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.expect
index ca127fd..f3405b2 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleParenthesizedPattern(()
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.intertwined.expect
index a18b0d7..4444b7e 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_parenthesized_pattern.dart.intertwined.expect
@@ -69,16 +69,16 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
-                            parseVariablePattern((, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
+                            parseVariablePattern((, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         ensureCloseParen(as, ()
                         listener: handleParenthesizedPattern(()
                   ensureColon())
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.expect
index 5df8df2..5adc0ac 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.expect
@@ -31,7 +31,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handlePatternField(:)
               handleLiteralInt(2)
               handleConstantPattern(null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.intertwined.expect
index f1e2939..781d8dd 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_implicitly_named.dart.intertwined.expect
@@ -69,20 +69,20 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         listener: handleNoName(()
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'SimpleType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.expect
index e7596cc..6413dfb 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.expect
@@ -31,7 +31,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handlePatternField(:)
               handleLiteralInt(2)
               handleConstantPattern(null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.intertwined.expect
index 9cf8b60..3e619f5 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_named.dart.intertwined.expect
@@ -69,21 +69,21 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
                         ensureIdentifier((, namedRecordFieldReference)
                           listener: handleIdentifier(n, namedRecordFieldReference)
-                        parsePattern(:, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(:, isRefutableContext: true)
-                            parseVariablePattern(:, typeInfo: Instance of 'SimpleType')
+                        parsePattern(:, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(:, PatternContext.matching)
+                            parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handlePatternField(:)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.expect
index ddb6cd7..7d3dc38 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.expect
@@ -30,7 +30,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handlePatternField(null)
               handleLiteralInt(2)
               handleConstantPattern(null)
diff --git a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.intertwined.expect
index cee0258..83478dd 100644
--- a/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/typed_variable_named_as_inside_record_pattern_unnamed.dart.intertwined.expect
@@ -69,19 +69,19 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseParenthesizedPatternOrRecordPattern(case, isRefutableContext: true)
-                        parsePattern((, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern((, isRefutableContext: true)
-                            parseVariablePattern((, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+                        parsePattern((, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.matching)
+                            parseVariablePattern((, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                               listener: handleIdentifier(int, typeReference)
                               listener: handleNoTypeArguments(as)
                               listener: handleType(int, null)
-                              listener: handleVariablePattern(null, as)
+                              listener: handleVariablePattern(null, as, false)
                         listener: handlePatternField(null)
-                        parsePattern(,, precedence: 1, isRefutableContext: true)
-                          parsePrimaryPattern(,, isRefutableContext: true)
+                        parsePattern(,, PatternContext.matching, precedence: 1)
+                          parsePrimaryPattern(,, PatternContext.matching)
                             parsePrecedenceExpression(,, 17, false)
                               parseUnaryExpression(,, false)
                                 parsePrimary(,, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.expect
index a24021e..9edfb72 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.intertwined.expect
index 28b8b38..6efa133 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_case.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, y)
+                        listener: handleVariablePattern(var, y, false)
                   ensureColon(y)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.expect
index 0b2137b..5eafc6b 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.intertwined.expect
index 97623b4..f258103 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_cast.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, y)
+                        listener: handleVariablePattern(var, y, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.expect
index 35e81a1..099c8c6 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.expect
@@ -25,7 +25,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(var)
-          handleVariablePattern(var, y)
+          handleVariablePattern(var, y, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.intertwined.expect
index 63bdaec..19a111f 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_if_case.dart.intertwined.expect
@@ -61,11 +61,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(var)
-                          listener: handleVariablePattern(var, y)
+                          listener: handleVariablePattern(var, y, false)
                     ensureCloseParen(y, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.expect
index 23e1545..ebbdf18 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.intertwined.expect
index 9aebd7a..1df60f8 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_assert.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, y)
+                        listener: handleVariablePattern(var, y, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.expect
index 8a314d4..74eb962 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.expect
@@ -28,7 +28,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, y)
+              handleVariablePattern(var, y, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.intertwined.expect
index ba37e50..4ed8e70 100644
--- a/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/var_variable_inside_null_check.dart.intertwined.expect
@@ -69,11 +69,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, y)
+                        listener: handleVariablePattern(var, y, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.expect
index e4df700..8e896c4 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, y)
+        handleVariablePattern(null, y, false)
         beginAsOperatorType(as)
           handleIdentifier(Object, typeReference)
           handleNoTypeArguments())
diff --git a/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.intertwined.expect
index 04b93d1..7438844 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_bare_insideCast.dart.intertwined.expect
@@ -43,14 +43,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, y)
+                              listener: handleVariablePattern(null, y, false)
                           listener: beginAsOperatorType(as)
                           computeTypeAfterIsOrAs(as)
                           listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.expect
index 55aa98d..fdf9081 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.expect
@@ -20,7 +20,7 @@
         beginMetadataStar(var)
         endMetadataStar(0)
         handleNoType(()
-        handleVariablePattern(null, y)
+        handleVariablePattern(null, y, false)
         handleNullAssertPattern(!)
         handleParenthesizedPattern(()
         handleIdentifier(x, expression)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.intertwined.expect
index 5750635..25e92a9 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_bare_insideNullAssert.dart.intertwined.expect
@@ -43,14 +43,14 @@
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
                 parsePatternVariableDeclarationStatement(var, {, var)
-                  parsePattern(var, precedence: 1, isRefutableContext: false)
-                    parsePrimaryPattern(var, isRefutableContext: false)
-                      parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
-                        parsePattern((, precedence: 1, isRefutableContext: false)
-                          parsePrimaryPattern((, isRefutableContext: false)
-                            parseVariablePattern((, typeInfo: Instance of 'NoType')
+                  parsePattern(var, PatternContext.declaration, precedence: 1)
+                    parsePrimaryPattern(var, PatternContext.declaration)
+                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+                        parsePattern((, PatternContext.declaration, precedence: 1)
+                          parsePrimaryPattern((, PatternContext.declaration)
+                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                               listener: handleNoType(()
-                              listener: handleVariablePattern(null, y)
+                              listener: handleVariablePattern(null, y, false)
                           listener: handleNullAssertPattern(!)
                         ensureCloseParen(!, ()
                         listener: handleParenthesizedPattern(()
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.expect
index 13285e6..c00527a 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(when, typeReference)
               handleNoTypeArguments(as)
               handleType(when, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               beginAsOperatorType(as)
                 handleIdentifier(when, typeReference)
                 handleNoTypeArguments(when)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.intertwined.expect
index 3a5ebc64..664c49c 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_absurd.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(when, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(when, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(when, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.expect
index 14f4083..1b0e83a 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(as)
               handleType(int, null)
-              handleVariablePattern(null, as)
+              handleVariablePattern(null, as, false)
               handleLiteralBool(true)
             endCaseExpression(case, when, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.intertwined.expect
index 21039e2..fed5462 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedAs_beforeWhen.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(as)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, as)
+                        listener: handleVariablePattern(null, as, false)
                   parseExpression(when)
                     looksLikeOuterPatternEquals(when)
                       skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.expect
index cff09b1..ab1df05 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(_, typeReference)
               handleNoTypeArguments(y)
               handleType(_, null)
-              handleVariablePattern(null, y)
+              handleVariablePattern(null, y, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.intertwined.expect
index c432898..03fecc3 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedUnderscore_insideCase.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(_, typeReference)
                         listener: handleNoTypeArguments(y)
                         listener: handleType(_, null)
-                        listener: handleVariablePattern(null, y)
+                        listener: handleVariablePattern(null, y, false)
                   ensureColon(y)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.expect
index 9178316..f725b81 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(when)
               handleType(int, null)
-              handleVariablePattern(null, when)
+              handleVariablePattern(null, when, false)
               handleIdentifier(when, expression)
               handleNoTypeArguments(>)
               handleNoArguments(>)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.intertwined.expect
index 1a60140..154fbdb 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_absurd.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(when)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, when)
+                        listener: handleVariablePattern(null, when, false)
                   parseExpression(when)
                     looksLikeOuterPatternEquals(when)
                       skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.expect
index 917df1b..c96ab9b 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(when)
               handleType(int, null)
-              handleVariablePattern(null, when)
+              handleVariablePattern(null, when, false)
               handleLiteralBool(true)
             endCaseExpression(case, when, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.intertwined.expect
index 45e16c6..7c4fdab 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_beforeWhen.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(when)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, when)
+                        listener: handleVariablePattern(null, when, false)
                   parseExpression(when)
                     looksLikeOuterPatternEquals(when)
                       skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.expect
index 60738b5..8fb17cd 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(when)
               handleType(int, null)
-              handleVariablePattern(null, when)
+              handleVariablePattern(null, when, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.intertwined.expect
index 04d4933..3df47a4 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCase.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(when)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, when)
+                        listener: handleVariablePattern(null, when, false)
                   ensureColon(when)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.expect
index 23a828b..8afdf74 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(when)
               handleType(int, null)
-              handleVariablePattern(null, when)
+              handleVariablePattern(null, when, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.intertwined.expect
index c8875c2..f10f7e5 100644
--- a/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/variable_typedNamedWhen_insideCast.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(when)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, when)
+                        listener: handleVariablePattern(null, when, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.expect
index f46d108..3e2413f 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleLiteralBool(true)
             endCaseExpression(case, when, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.intertwined.expect
index 834f982..ee295f1 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_beforeWhen.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                   parseExpression(when)
                     looksLikeOuterPatternEquals(when)
                       skipOuterPattern(when)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.expect
index 79ab344..cc77baf 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.intertwined.expect
index 8e18b62..d951e75 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCase.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.expect
index 57a6a7c..cec3c66 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.intertwined.expect
index d5713b4..c2b3d1f 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideCast.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.expect
index 69c2a6e..64d472e 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.expect
@@ -23,7 +23,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(case)
-          handleVariablePattern(null, _)
+          handleVariablePattern(null, _, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.intertwined.expect
index da25590..e62a8bc 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideIfCase.dart.intertwined.expect
@@ -58,11 +58,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(case)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.expect
index 8fc402b..a92ee56 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.intertwined.expect
index 32f7146..bc3db43 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullAssert.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.expect
index 6173c1d..c2a6225 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(case)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.intertwined.expect
index 47e4ca8..b715816 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_bare_insideNullCheck.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(case)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.expect
index 30ca722..b3e862e 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.intertwined.expect
index d9928fa..0ca52d2 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCase.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.expect
index 386d32c..4922e956 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.intertwined.expect
index 595e205..4880b96 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideCast.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.expect
index 0da0ee4..32cc4f1 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.expect
@@ -25,7 +25,7 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(_)
           handleType(int, null)
-          handleVariablePattern(final, _)
+          handleVariablePattern(final, _, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.intertwined.expect
index ce2f6ce..92bf338 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideIfCase.dart.intertwined.expect
@@ -58,13 +58,13 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(_)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(final, _)
+                          listener: handleVariablePattern(final, _, false)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.expect
index 457968a..498b71a 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.intertwined.expect
index a286af7..eb70e8b 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullAssert.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.expect
index ffb5838..da4d00d 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.intertwined.expect
index 8c9bf86..913a32e 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_typed_insideNullCheck.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.expect
index 9501ba9..e71fb0b 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.intertwined.expect
index bdf5f18..284e8c5 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCase.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.expect
index a10616e..e1723da 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.intertwined.expect
index 938b639..f5005ab 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideCast.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.expect
index cba2ec3..918226c 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.expect
@@ -23,7 +23,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(final)
-          handleVariablePattern(final, _)
+          handleVariablePattern(final, _, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.intertwined.expect
index a64ce73..d7fcd80 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideIfCase.dart.intertwined.expect
@@ -58,11 +58,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(final)
-                          listener: handleVariablePattern(final, _)
+                          listener: handleVariablePattern(final, _, false)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.expect
index afe67b8..60cb3cc 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.intertwined.expect
index 1348b6c..6f5dec9 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullAssert.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.expect
index 10d05e1..d9ff7a2b 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(final)
-              handleVariablePattern(final, _)
+              handleVariablePattern(final, _, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.intertwined.expect
index 0e6cfae..57ab3d6 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_final_untyped_insideNullCheck.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(final)
-                        listener: handleVariablePattern(final, _)
+                        listener: handleVariablePattern(final, _, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.expect
index 13dfb17..76836d4 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.intertwined.expect
index 2d39ff2..26dfe9c 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCase.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.expect
index c9b9f6b..e13df50 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.intertwined.expect
index 0904571..d1abfe6 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideCast.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.expect
index 08609dd..df8ef1f 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.expect
@@ -25,7 +25,7 @@
           handleIdentifier(int, typeReference)
           handleNoTypeArguments(_)
           handleType(int, null)
-          handleVariablePattern(null, _)
+          handleVariablePattern(null, _, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.intertwined.expect
index 9c1c220..c64245a 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideIfCase.dart.intertwined.expect
@@ -58,13 +58,13 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                           listener: handleIdentifier(int, typeReference)
                           listener: handleNoTypeArguments(_)
                           listener: handleType(int, null)
-                          listener: handleVariablePattern(null, _)
+                          listener: handleVariablePattern(null, _, false)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.expect
index ebe7f20..f68dffd 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.intertwined.expect
index 9387d6c..4586cd0 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullAssert.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.expect
index cc0b1c4..89f7dd8 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.expect
@@ -28,7 +28,7 @@
               handleIdentifier(int, typeReference)
               handleNoTypeArguments(_)
               handleType(int, null)
-              handleVariablePattern(null, _)
+              handleVariablePattern(null, _, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.intertwined.expect
index 144dc83..e6b27d9 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_typed_insideNullCheck.dart.intertwined.expect
@@ -66,13 +66,13 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'SimpleType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'SimpleType')
                         listener: handleIdentifier(int, typeReference)
                         listener: handleNoTypeArguments(_)
                         listener: handleType(int, null)
-                        listener: handleVariablePattern(null, _)
+                        listener: handleVariablePattern(null, _, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.expect
index e60492a..f354621 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, _)
+              handleVariablePattern(var, _, false)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
               handleBreakStatement(false, break, ;)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.intertwined.expect
index 37d2829..2175d56 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCase.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, _)
+                        listener: handleVariablePattern(var, _, false)
                   ensureColon(_)
                   listener: endCaseExpression(case, null, :)
                   peekPastLabels(break)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.expect
index e59f822..1948141 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, _)
+              handleVariablePattern(var, _, false)
               beginAsOperatorType(as)
                 handleIdentifier(Object, typeReference)
                 handleNoTypeArguments(:)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.intertwined.expect
index 6f4748c..356da03d 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideCast.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, _)
+                        listener: handleVariablePattern(var, _, false)
                     listener: beginAsOperatorType(as)
                     computeTypeAfterIsOrAs(as)
                     listener: handleIdentifier(Object, typeReference)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.expect
index 476a022..39c2813 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.expect
@@ -23,7 +23,7 @@
           handleNoArguments(case)
           handleSend(x, case)
           handleNoType(var)
-          handleVariablePattern(var, _)
+          handleVariablePattern(var, _, false)
           handleParenthesizedCondition((, case, null)
           beginThenStatement({)
             beginBlock({, BlockKind(statement))
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.intertwined.expect
index 50241ab..6b0cdf9 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideIfCase.dart.intertwined.expect
@@ -58,11 +58,11 @@
                                 parseArgumentsOpt(x)
                                   listener: handleNoArguments(case)
                                 listener: handleSend(x, case)
-                    parsePattern(case, precedence: 1, isRefutableContext: true)
-                      parsePrimaryPattern(case, isRefutableContext: true)
-                        parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                    parsePattern(case, PatternContext.matching, precedence: 1)
+                      parsePrimaryPattern(case, PatternContext.matching)
+                        parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                           listener: handleNoType(var)
-                          listener: handleVariablePattern(var, _)
+                          listener: handleVariablePattern(var, _, false)
                     ensureCloseParen(_, ()
                     listener: handleParenthesizedCondition((, case, null)
                 listener: beginThenStatement({)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.expect
index 5da8419..d3f45ee 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, _)
+              handleVariablePattern(var, _, false)
               handleNullAssertPattern(!)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.intertwined.expect
index 1067c1b..9cfb26a 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullAssert.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, _)
+                        listener: handleVariablePattern(var, _, false)
                     listener: handleNullAssertPattern(!)
                   ensureColon(!)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.expect
index fa6db20..fd66968 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.expect
@@ -26,7 +26,7 @@
           beginSwitchBlock({)
             beginCaseExpression(case)
               handleNoType(var)
-              handleVariablePattern(var, _)
+              handleVariablePattern(var, _, false)
               handleNullCheckPattern(?)
             endCaseExpression(case, null, :)
             beginSwitchCase(0, 1, case)
diff --git a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.intertwined.expect
index 6fafc16..0ee6c7b 100644
--- a/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/wildcard_var_insideNullCheck.dart.intertwined.expect
@@ -66,11 +66,11 @@
                   notEofOrValue(}, case)
                   peekPastLabels(case)
                   listener: beginCaseExpression(case)
-                  parsePattern(case, precedence: 1, isRefutableContext: true)
-                    parsePrimaryPattern(case, isRefutableContext: true)
-                      parseVariablePattern(case, typeInfo: Instance of 'NoType')
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      parseVariablePattern(case, PatternContext.matching, typeInfo: Instance of 'NoType')
                         listener: handleNoType(var)
-                        listener: handleVariablePattern(var, _)
+                        listener: handleVariablePattern(var, _, false)
                     listener: handleNullCheckPattern(?)
                   ensureColon(?)
                   listener: endCaseExpression(case, null, :)
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index eda5d69..ddd9b6d 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -2074,10 +2074,14 @@
   }
 
   @override
-  void handleVariablePattern(Token? keyword, Token variable) {
+  void handleVariablePattern(Token? keyword, Token variable,
+      {required bool inAssignmentPattern}) {
     seen(keyword);
     seen(variable);
-    doPrint('handleVariablePattern(' '$keyword, ' '$variable)');
+    doPrint('handleVariablePattern('
+        '$keyword, '
+        '$variable, '
+        '$inAssignmentPattern)');
   }
 
   @override
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index e5d192d..366425b 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -14,7 +14,7 @@
 import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/parser.dart' show Parser;
 import 'package:_fe_analyzer_shared/src/parser/parser_impl.dart'
-    show AwaitOrYieldContext, ForPartsContext;
+    show AwaitOrYieldContext, ForPartsContext, PatternContext;
 import 'package:_fe_analyzer_shared/src/parser/token_stream_rewriter.dart';
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
@@ -2667,87 +2667,78 @@
   }
 
   @override
-  Token parsePattern(Token token,
-      {int precedence = 1, required bool isRefutableContext}) {
+  Token parsePattern(Token token, PatternContext patternContext,
+      {int precedence = 1}) {
     doPrint('parsePattern('
         '$token, '
-        'precedence: $precedence, '
-        'isRefutableContext: $isRefutableContext)');
+        '$patternContext, '
+        'precedence: $precedence)');
     indent++;
-    var result = super.parsePattern(token,
-        precedence: precedence, isRefutableContext: isRefutableContext);
+    var result =
+        super.parsePattern(token, patternContext, precedence: precedence);
     indent--;
     return result;
   }
 
   @override
-  Token parsePrimaryPattern(Token token, {required bool isRefutableContext}) {
-    doPrint('parsePrimaryPattern('
+  Token parsePrimaryPattern(Token token, PatternContext patternContext) {
+    doPrint('parsePrimaryPattern(' '$token, ' '$patternContext)');
+    indent++;
+    var result = super.parsePrimaryPattern(token, patternContext);
+    indent--;
+    return result;
+  }
+
+  @override
+  Token parseVariablePattern(Token token, PatternContext patternContext,
+      {TypeInfo typeInfo = noType}) {
+    doPrint('parseVariablePattern('
         '$token, '
-        'isRefutableContext: $isRefutableContext)');
+        '$patternContext, '
+        'typeInfo: $typeInfo)');
     indent++;
-    var result = super
-        .parsePrimaryPattern(token, isRefutableContext: isRefutableContext);
+    var result =
+        super.parseVariablePattern(token, patternContext, typeInfo: typeInfo);
     indent--;
     return result;
   }
 
   @override
-  Token parseVariablePattern(Token token, {TypeInfo typeInfo = noType}) {
-    doPrint('parseVariablePattern(' '$token, ' 'typeInfo: $typeInfo)');
+  Token parseListPatternSuffix(Token token, PatternContext patternContext) {
+    doPrint('parseListPatternSuffix(' '$token, ' '$patternContext)');
     indent++;
-    var result = super.parseVariablePattern(token, typeInfo: typeInfo);
+    var result = super.parseListPatternSuffix(token, patternContext);
     indent--;
     return result;
   }
 
   @override
-  Token parseListPatternSuffix(Token token,
-      {required bool isRefutableContext}) {
-    doPrint('parseListPatternSuffix('
-        '$token, '
-        'isRefutableContext: $isRefutableContext)');
+  Token parseMapPatternSuffix(Token token, PatternContext patternContext) {
+    doPrint('parseMapPatternSuffix(' '$token, ' '$patternContext)');
     indent++;
-    var result = super
-        .parseListPatternSuffix(token, isRefutableContext: isRefutableContext);
+    var result = super.parseMapPatternSuffix(token, patternContext);
     indent--;
     return result;
   }
 
   @override
-  Token parseMapPatternSuffix(Token token, {required bool isRefutableContext}) {
-    doPrint('parseMapPatternSuffix('
-        '$token, '
-        'isRefutableContext: $isRefutableContext)');
-    indent++;
-    var result = super
-        .parseMapPatternSuffix(token, isRefutableContext: isRefutableContext);
-    indent--;
-    return result;
-  }
-
-  @override
-  Token parseParenthesizedPatternOrRecordPattern(Token token,
-      {required bool isRefutableContext}) {
+  Token parseParenthesizedPatternOrRecordPattern(
+      Token token, PatternContext patternContext) {
     doPrint('parseParenthesizedPatternOrRecordPattern('
         '$token, '
-        'isRefutableContext: $isRefutableContext)');
+        '$patternContext)');
     indent++;
-    var result = super.parseParenthesizedPatternOrRecordPattern(token,
-        isRefutableContext: isRefutableContext);
+    var result =
+        super.parseParenthesizedPatternOrRecordPattern(token, patternContext);
     indent--;
     return result;
   }
 
   @override
-  Token parseObjectPatternRest(Token token,
-      {required bool isRefutableContext}) {
-    doPrint('parseObjectPatternRest('
-        '$token, '
-        'isRefutableContext: $isRefutableContext)');
+  Token parseObjectPatternRest(Token token, PatternContext patternContext) {
+    doPrint('parseObjectPatternRest(' '$token, ' '$patternContext)');
     indent++;
-    var result = super
-        .parseObjectPatternRest(token, isRefutableContext: isRefutableContext);
+    var result = super.parseObjectPatternRest(token, patternContext);
     indent--;
     return result;
   }
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index 5715d21..c345900 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -51,7 +51,7 @@
 import 'package:_fe_analyzer_shared/src/parser/listener.dart' show Listener;
 import 'package:_fe_analyzer_shared/src/parser/member_kind.dart';
 import 'package:_fe_analyzer_shared/src/parser/parser.dart' show Parser;
-import 'package:_fe_analyzer_shared/src/parser/parser_impl.dart' show AwaitOrYieldContext, ForPartsContext;
+import 'package:_fe_analyzer_shared/src/parser/parser_impl.dart' show AwaitOrYieldContext, ForPartsContext, PatternContext;
 import 'package:_fe_analyzer_shared/src/parser/token_stream_rewriter.dart';
 import 'package:_fe_analyzer_shared/src/parser/type_info.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
diff --git a/runtime/docs/async.md b/runtime/docs/async.md
index 34de12a..6edbbc9 100644
--- a/runtime/docs/async.md
+++ b/runtime/docs/async.md
@@ -255,6 +255,20 @@
 callbacks to that Future. Otherwise it schedules a micro-task to continue execution of
 the suspended function later.
 
+### AwaitWithTypeCheck stub
+
+AwaitWithTypeCheck is a variant of Await stub which additionally passes type argument `T`
+and calls `_SuspendState._awaitWithTypeCheck` in order to test if the value has a
+correct `Future<T>` type before awaiting.
+
+This runtime check is needed to maintain soundness in case value is a Future of an
+incompatible type, for example:
+
+```
+final FutureOr<Object> f = Future<Object?>.value(null);
+Object x = await f; // x == f, not null.
+```
+
 ### ReturnAsync stub
 
 ReturnAsync stub = Return stub which calls `_SuspendState._returnAsync`.
diff --git a/runtime/lib/ffi.cc b/runtime/lib/ffi.cc
index e50c84b..4893b7c 100644
--- a/runtime/lib/ffi.cc
+++ b/runtime/lib/ffi.cc
@@ -74,88 +74,35 @@
 CLASS_LIST_FFI_NUMERIC_FIXED_SIZE(DEFINE_NATIVE_ENTRY_AS_EXTERNAL_TYPED_DATA)
 #undef DEFINE_NATIVE_ENTRY_AS_EXTERNAL_TYPED_DATA
 
-DEFINE_NATIVE_ENTRY(Ffi_nativeCallbackFunction, 1, 2) {
-#if defined(DART_PRECOMPILED_RUNTIME) || defined(DART_PRECOMPILER)
-  // Calls to this function are removed by the flow-graph builder in AOT.
-  // See StreamingFlowGraphBuilder::BuildFfiNativeCallbackFunction().
-  UNREACHABLE();
-#else
-  GET_NATIVE_TYPE_ARGUMENT(type_arg, arguments->NativeTypeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Closure, closure, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Instance, exceptional_return,
-                               arguments->NativeArgAt(1));
-
-  ASSERT(type_arg.IsInstantiated() && type_arg.IsFunctionType());
-  const FunctionType& native_signature = FunctionType::Cast(type_arg);
-  Function& func = Function::Handle(zone, closure.function());
-
-  // The FE verifies that the target of a 'fromFunction' is a static method, so
-  // the value we see here must be a static tearoff. See ffi_use_sites.dart for
-  // details.
-  //
-  // TODO(36748): Define hot-reload semantics of native callbacks. We may need
-  // to look up the target by name.
-  ASSERT(func.IsImplicitClosureFunction());
-  func = func.parent_function();
-  ASSERT(func.is_static());
-
-  // AbiSpecificTypes can have an incomplete mapping.
-  const char* error = nullptr;
-  compiler::ffi::NativeFunctionTypeFromFunctionType(zone, native_signature,
-                                                    &error);
-  if (error != nullptr) {
-    Exceptions::ThrowCompileTimeError(LanguageError::Handle(
-        zone, LanguageError::New(String::Handle(zone, String::New(error)))));
-  }
-
-  // We are returning an object which is not an Instance here. This is only OK
-  // because we know that the result will be passed directly to
-  // _pointerFromFunction and will not leak out into user code.
-  arguments->SetReturn(
-      Function::Handle(zone, compiler::ffi::NativeCallbackFunction(
-                                 native_signature, func, exceptional_return,
-                                 /*register_function=*/false)));
-
-  // Because we have already set the return value.
-  return Object::sentinel().ptr();
-#endif
-}
-
 DEFINE_NATIVE_ENTRY(Ffi_pointerFromFunction, 1, 1) {
-  const Function& function =
-      Function::CheckedHandle(zone, arguments->NativeArg0());
-
-  Code& code = Code::Handle(zone);
-
-#if defined(DART_PRECOMPILED_RUNTIME)
-  code = function.CurrentCode();
-#else
-  // We compile the callback immediately because we need to return a pointer to
-  // the entry-point. Native calls do not use patching like Dart calls, so we
-  // cannot compile it lazily.
-  const Object& result = Object::Handle(
-      zone, Compiler::CompileOptimizedFunction(thread, function));
-  if (result.IsError()) {
-    Exceptions::PropagateError(Error::Cast(result));
-  }
-  ASSERT(result.IsCode());
-  code ^= result.ptr();
-#endif
-
+  const auto& function = Function::CheckedHandle(zone, arguments->NativeArg0());
+  const auto& code =
+      Code::Handle(zone, FLAG_precompiled_mode ? function.CurrentCode()
+                                               : function.EnsureHasCode());
   ASSERT(!code.IsNull());
-  thread->SetFfiCallbackCode(function.FfiCallbackId(), code);
 
-#ifdef TARGET_ARCH_IA32
+#if defined(TARGET_ARCH_IA32)
   // On ia32, store the stack delta that we need to use when returning.
   const intptr_t stack_return_delta =
       function.FfiCSignatureReturnsStruct() && CallingConventions::kUsesRet4
           ? compiler::target::kWordSize
           : 0;
-  thread->SetFfiCallbackStackReturn(function.FfiCallbackId(),
-                                    stack_return_delta);
+#else
+  const intptr_t stack_return_delta = 0;
 #endif
+  thread->SetFfiCallbackCode(function, code, stack_return_delta);
 
   uword entry_point = code.EntryPoint();
+
+  // In JIT we use one more indirection:
+  //   * AOT: Native -> Ffi Trampoline -> Dart function
+  //   * JIT: Native -> Jit trampoline -> Ffi Trampoline -> Dart function
+  //
+  // We do that since ffi trampoline code lives in Dart heap. During GC we can
+  // flip page protections from RX to RW to GC JITed code. During that time
+  // machine code on such pages cannot be executed. Native code therefore has to
+  // perform the safepoint transition before executing code in Dart heap (which
+  // is why we use the jit trampoline).
 #if !defined(DART_PRECOMPILED_RUNTIME)
   if (NativeCallbackTrampolines::Enabled()) {
     entry_point = isolate->native_callback_trampolines()->TrampolineForId(
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index 3ff8f31..88fa6e7 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -1382,13 +1382,7 @@
       FfiTrampolineDataPtr const data = objects_[i];
       AutoTraceObject(data);
       WriteFromTo(data);
-
-      if (s->kind() == Snapshot::kFullAOT) {
-        s->Write<int32_t>(data->untag()->callback_id_);
-      } else {
-        // FFI callbacks can only be written to AOT snapshots.
-        ASSERT(data->untag()->callback_target() == Object::null());
-      }
+      s->Write<int32_t>(data->untag()->callback_id_);
     }
   }
 
@@ -1416,8 +1410,7 @@
       Deserializer::InitializeHeader(data, kFfiTrampolineDataCid,
                                      FfiTrampolineData::InstanceSize());
       d.ReadFromTo(data);
-      data->untag()->callback_id_ =
-          d_->kind() == Snapshot::kFullAOT ? d.Read<int32_t>() : -1;
+      data->untag()->callback_id_ = d.Read<int32_t>();
     }
   }
 };
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index aec2427..50cc478 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -390,7 +390,6 @@
   V(Ffi_address, 1)                                                            \
   V(Ffi_fromAddress, 1)                                                        \
   V(Ffi_asFunctionInternal, 2)                                                 \
-  V(Ffi_nativeCallbackFunction, 2)                                             \
   V(Ffi_pointerFromFunction, 1)                                                \
   V(Ffi_dl_open, 1)                                                            \
   V(Ffi_dl_lookup, 2)                                                          \
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index f18e824..c339fbe 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -7678,12 +7678,24 @@
                              locs(), deopt_id(), env());
 }
 
+Definition* SuspendInstr::Canonicalize(FlowGraph* flow_graph) {
+  if (stub_id() == StubId::kAwaitWithTypeCheck &&
+      !operand()->Type()->CanBeFuture()) {
+    type_args()->RemoveFromUseList();
+    stub_id_ = StubId::kAwait;
+  }
+  return this;
+}
+
 LocationSummary* SuspendInstr::MakeLocationSummary(Zone* zone, bool opt) const {
-  const intptr_t kNumInputs = 1;
+  const intptr_t kNumInputs = has_type_args() ? 2 : 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* locs = new (zone)
       LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
   locs->set_in(0, Location::RegisterLocation(SuspendStubABI::kArgumentReg));
+  if (has_type_args()) {
+    locs->set_in(1, Location::RegisterLocation(SuspendStubABI::kTypeArgsReg));
+  }
   locs->set_out(0, Location::RegisterLocation(CallingConventions::kReturnReg));
   return locs;
 }
@@ -7698,6 +7710,9 @@
     case StubId::kAwait:
       stub = object_store->await_stub();
       break;
+    case StubId::kAwaitWithTypeCheck:
+      stub = object_store->await_with_type_check_stub();
+      break;
     case StubId::kYieldAsyncStar:
       stub = object_store->yield_async_star_stub();
       break;
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index 2a964aa..f7eb34e 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -10623,10 +10623,11 @@
 };
 
 // Suspends execution using the suspend stub specified using [StubId].
-class SuspendInstr : public TemplateDefinition<1, Throws> {
+class SuspendInstr : public TemplateDefinition<2, Throws> {
  public:
   enum class StubId {
     kAwait,
+    kAwaitWithTypeCheck,
     kYieldAsyncStar,
     kSuspendSyncStarAtStart,
     kSuspendSyncStarAtYield,
@@ -10635,6 +10636,7 @@
   SuspendInstr(const InstructionSource& source,
                StubId stub_id,
                Value* operand,
+               Value* type_args,
                intptr_t deopt_id,
                intptr_t resume_deopt_id)
       : TemplateDefinition(source, deopt_id),
@@ -10642,9 +10644,22 @@
         resume_deopt_id_(resume_deopt_id),
         token_pos_(source.token_pos) {
     SetInputAt(0, operand);
+    if (has_type_args()) {
+      SetInputAt(1, type_args);
+    } else {
+      ASSERT(type_args == nullptr);
+    }
   }
 
+  bool has_type_args() const { return stub_id_ == StubId::kAwaitWithTypeCheck; }
+  virtual intptr_t InputCount() const { return has_type_args() ? 2 : 1; }
+
   Value* operand() const { return inputs_[0]; }
+  Value* type_args() const {
+    ASSERT(has_type_args());
+    return inputs_[1];
+  }
+
   StubId stub_id() const { return stub_id_; }
   intptr_t resume_deopt_id() const { return resume_deopt_id_; }
   virtual TokenPosition token_pos() const { return token_pos_; }
@@ -10659,8 +10674,10 @@
   DECLARE_INSTRUCTION(Suspend);
   PRINT_OPERANDS_TO_SUPPORT
 
+  virtual Definition* Canonicalize(FlowGraph* flow_graph);
+
 #define FIELD_LIST(F)                                                          \
-  F(const StubId, stub_id_)                                                    \
+  F(StubId, stub_id_)                                                          \
   F(const intptr_t, resume_deopt_id_)                                          \
   F(const TokenPosition, token_pos_)
 
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 7453398..db03c7f 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -1642,26 +1642,12 @@
 
   __ PushNativeCalleeSavedRegisters();
 
-  // Load the thread object. If we were called by a trampoline, the thread is
-  // already loaded.
-  if (FLAG_precompiled_mode) {
+  // Load the thread object. If we were called by a JIT trampoline, the thread
+  // is already loaded.
+  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
+  if (!NativeCallbackTrampolines::Enabled()) {
     compiler->LoadBSSEntry(BSS::Relocation::DRT_GetThreadForNativeCallback, R1,
                            R0);
-  } else if (!NativeCallbackTrampolines::Enabled()) {
-    // In JIT mode, we can just paste the address of the runtime entry into the
-    // generated code directly. This is not a problem since we don't save
-    // callbacks into JIT snapshots.
-    ASSERT(kWordSize == compiler::target::kWordSize);
-    __ LoadImmediate(
-        R1, static_cast<compiler::target::uword>(
-                reinterpret_cast<uword>(DLRT_GetThreadForNativeCallback)));
-  }
-
-  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
-
-  // Load the thread object. If we were called by a trampoline, the thread is
-  // already loaded.
-  if (!NativeCallbackTrampolines::Enabled()) {
     // Create another frame to align the frame before continuing in "native"
     // code.
     __ EnterFrame(1 << FP, 0);
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index a208078..e945072 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -1527,22 +1527,12 @@
 
   __ PushNativeCalleeSavedRegisters();
 
-  // Load the thread object. If we were called by a trampoline, the thread is
-  // already loaded.
-  if (FLAG_precompiled_mode) {
+  // Load the thread object. If we were called by a JIT trampoline, the thread
+  // is already loaded.
+  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
+  if (!NativeCallbackTrampolines::Enabled()) {
     compiler->LoadBSSEntry(BSS::Relocation::DRT_GetThreadForNativeCallback, R1,
                            R0);
-  } else if (!NativeCallbackTrampolines::Enabled()) {
-    // In JIT mode, we can just paste the address of the runtime entry into the
-    // generated code directly. This is not a problem since we don't save
-    // callbacks into JIT snapshots.
-    __ LoadImmediate(
-        R1, reinterpret_cast<int64_t>(DLRT_GetThreadForNativeCallback));
-  }
-
-  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
-
-  if (!NativeCallbackTrampolines::Enabled()) {
     // Create another frame to align the frame before continuing in "native"
     // code.
     __ EnterFrame(0);
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 6e109ad..536c2e6 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -1207,23 +1207,8 @@
 
   const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
 
-  // Load the thread object.
-  //
-  // Create another frame to align the frame before continuing in "native" code.
-  // If we were called by a trampoline, it has already loaded the thread.
-  ASSERT(!FLAG_precompiled_mode);  // No relocation for AOT linking.
-  if (!NativeCallbackTrampolines::Enabled()) {
-    __ EnterFrame(0);
-    __ ReserveAlignedFrameSpace(compiler::target::kWordSize);
-
-    __ movl(compiler::Address(SPREG, 0), compiler::Immediate(callback_id));
-    __ movl(EAX, compiler::Immediate(reinterpret_cast<intptr_t>(
-                     DLRT_GetThreadForNativeCallback)));
-    __ call(EAX);
-    __ movl(THR, EAX);
-
-    __ LeaveFrame();
-  }
+  // The thread object was already loaded by a JIT trampoline.
+  ASSERT(NativeCallbackTrampolines::Enabled());
 
   // Save the current VMTag on the stack.
   __ movl(ECX, compiler::Assembler::VMTagAddress());
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index e62264a..b29a69a 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -1385,6 +1385,9 @@
     case StubId::kAwait:
       name = "Await";
       break;
+    case StubId::kAwaitWithTypeCheck:
+      name = "AwaitWithTypeCheck";
+      break;
     case StubId::kYieldAsyncStar:
       name = "YieldAsyncStar";
       break;
@@ -1396,7 +1399,7 @@
       break;
   }
   f->Printf("%s(", name);
-  operand()->PrintTo(f);
+  Definition::PrintOperandsTo(f);
   f->AddString(")");
 }
 
diff --git a/runtime/vm/compiler/backend/il_serializer.cc b/runtime/vm/compiler/backend/il_serializer.cc
index 7cbfed8..2a8bebf 100644
--- a/runtime/vm/compiler/backend/il_serializer.cc
+++ b/runtime/vm/compiler/backend/il_serializer.cc
@@ -925,8 +925,7 @@
         const Instance& exceptional_return = d->Read<const Instance&>();
         return Function::ZoneHandle(
             zone, compiler::ffi::NativeCallbackFunction(
-                      c_signature, callback_target, exceptional_return,
-                      /*register_function=*/true));
+                      c_signature, callback_target, exceptional_return));
       } else {
         const String& name = d->Read<const String&>();
         const FunctionType& signature = d->Read<const FunctionType&>();
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index c30f3c0..72cb0b3 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -1429,23 +1429,12 @@
   // Save ABI callee-saved registers.
   __ PushRegisters(kCalleeSaveRegistersSet);
 
-  // Load the address of DLRT_GetThreadForNativeCallback without using Thread.
-  if (FLAG_precompiled_mode) {
+  // Load the thread object. If we were called by a JIT trampoline, the thread
+  // is already loaded.
+  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
+  if (!NativeCallbackTrampolines::Enabled()) {
     compiler->LoadBSSEntry(BSS::Relocation::DRT_GetThreadForNativeCallback, RAX,
                            RCX);
-  } else if (!NativeCallbackTrampolines::Enabled()) {
-    // In JIT mode, we can just paste the address of the runtime entry into the
-    // generated code directly. This is not a problem since we don't save
-    // callbacks into JIT snapshots.
-    __ movq(RAX, compiler::Immediate(reinterpret_cast<intptr_t>(
-                     DLRT_GetThreadForNativeCallback)));
-  }
-
-  const intptr_t callback_id = marshaller_.dart_signature().FfiCallbackId();
-
-  // Create another frame to align the frame before continuing in "native" code.
-  // If we were called by a trampoline, it has already loaded the thread.
-  if (!NativeCallbackTrampolines::Enabled()) {
     __ EnterFrame(0);
     __ ReserveAlignedFrameSpace(0);
 
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 6764ade..2219816 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3186,6 +3186,11 @@
       value_check = Cids::CreateMonomorphic(Z, kFloat32x4Cid);
       break;
     }
+    case kTypedDataFloat64x2ArrayCid: {
+      // Check that value is always Float64x2.
+      value_check = Cids::CreateMonomorphic(Z, kFloat64x2Cid);
+      break;
+    }
     case kTypedDataInt64ArrayCid:
     case kTypedDataUint64ArrayCid:
       // StoreIndexedInstr takes unboxed int64, so value is
@@ -3965,6 +3970,13 @@
       return InlineByteArrayBaseLoad(flow_graph, call, receiver, receiver_cid,
                                      kTypedDataFloat32x4ArrayCid, graph_entry,
                                      entry, last, result);
+    case MethodRecognizer::kByteArrayBaseGetFloat64x2:
+      if (!ShouldInlineSimd()) {
+        return false;
+      }
+      return InlineByteArrayBaseLoad(flow_graph, call, receiver, receiver_cid,
+                                     kTypedDataFloat64x2ArrayCid, graph_entry,
+                                     entry, last, result);
     case MethodRecognizer::kByteArrayBaseGetInt32x4:
       if (!ShouldInlineSimd()) {
         return false;
@@ -4025,6 +4037,13 @@
       return InlineByteArrayBaseStore(flow_graph, target, call, receiver,
                                       receiver_cid, kTypedDataFloat32x4ArrayCid,
                                       graph_entry, entry, last, result);
+    case MethodRecognizer::kByteArrayBaseSetFloat64x2:
+      if (!ShouldInlineSimd()) {
+        return false;
+      }
+      return InlineByteArrayBaseStore(flow_graph, target, call, receiver,
+                                      receiver_cid, kTypedDataFloat64x2ArrayCid,
+                                      graph_entry, entry, last, result);
     case MethodRecognizer::kByteArrayBaseSetInt32x4:
       if (!ShouldInlineSimd()) {
         return false;
diff --git a/runtime/vm/compiler/ffi/callback.cc b/runtime/vm/compiler/ffi/callback.cc
index 6d4d213..a4c8fc4 100644
--- a/runtime/vm/compiler/ffi/callback.cc
+++ b/runtime/vm/compiler/ffi/callback.cc
@@ -17,8 +17,7 @@
 
 FunctionPtr NativeCallbackFunction(const FunctionType& c_signature,
                                    const Function& dart_target,
-                                   const Instance& exceptional_return,
-                                   bool register_function) {
+                                   const Instance& exceptional_return) {
   Thread* const thread = Thread::Current();
   Zone* const zone = thread->zone();
   Function& function = Function::Handle(zone);
@@ -74,16 +73,31 @@
   signature ^= ClassFinalizer::FinalizeType(signature);
   function.SetSignature(signature);
 
-  if (register_function) {
-    ObjectStore* object_store = thread->isolate_group()->object_store();
+  {
+    // Ensure only one thread updates the cache of deduped ffi trampoline
+    // functions.
+    auto isolate_group = thread->isolate_group();
+    SafepointWriteRwLocker ml(thread, isolate_group->program_lock());
+
+    auto object_store = isolate_group->object_store();
     if (object_store->ffi_callback_functions() == Array::null()) {
       FfiCallbackFunctionSet set(
           HashTables::New<FfiCallbackFunctionSet>(/*initial_capacity=*/4));
       object_store->set_ffi_callback_functions(set.Release());
     }
     FfiCallbackFunctionSet set(object_store->ffi_callback_functions());
+
+    const intptr_t entry_count_before = set.NumOccupied();
     function ^= set.InsertOrGet(function);
+    const intptr_t entry_count_after = set.NumOccupied();
+
     object_store->set_ffi_callback_functions(set.Release());
+
+    if (entry_count_before != entry_count_after) {
+      function.AssignFfiCallbackId(entry_count_before);
+    } else {
+      ASSERT(function.FfiCallbackId() != -1);
+    }
   }
 
   return function.ptr();
diff --git a/runtime/vm/compiler/ffi/callback.h b/runtime/vm/compiler/ffi/callback.h
index d2bb1dc..37a4967 100644
--- a/runtime/vm/compiler/ffi/callback.h
+++ b/runtime/vm/compiler/ffi/callback.h
@@ -21,8 +21,7 @@
 
 FunctionPtr NativeCallbackFunction(const FunctionType& c_signature,
                                    const Function& dart_target,
-                                   const Instance& exceptional_return,
-                                   bool register_function);
+                                   const Instance& exceptional_return);
 
 }  // namespace ffi
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 60e48b8..c016e2a 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -3391,10 +3391,7 @@
     case MethodRecognizer::kFfiAsFunctionInternal:
       return BuildFfiAsFunctionInternal();
     case MethodRecognizer::kFfiNativeCallbackFunction:
-      if (CompilerState::Current().is_aot()) {
-        return BuildFfiNativeCallbackFunction();
-      }
-      break;
+      return BuildFfiNativeCallbackFunction();
     case MethodRecognizer::kFfiLoadAbiSpecificInt:
       return BuildLoadAbiSpecificInt(/*at_index=*/false);
     case MethodRecognizer::kFfiLoadAbiSpecificIntAtIndex:
@@ -4484,15 +4481,28 @@
 
   instructions += BuildExpression();  // read operand.
 
+  SuspendInstr::StubId stub_id = SuspendInstr::StubId::kAwait;
   if (ReadTag() == kSomething) {
-    // TODO(50529): Use runtime check type when present.
-    SkipDartType();  // read runtime check type.
+    const AbstractType& type = T.BuildType();  // read runtime check type.
+    if (!type.IsType() ||
+        !Class::Handle(Z, type.type_class()).IsFutureClass()) {
+      FATAL("Unexpected type for runtime check in await: %s", type.ToCString());
+    }
+    ASSERT(type.IsFinalized());
+    const auto& type_args = TypeArguments::ZoneHandle(Z, type.arguments());
+    if (!type_args.IsNull()) {
+      const auto& type_arg = AbstractType::Handle(Z, type_args.TypeAt(0));
+      if (!type_arg.IsTopTypeForSubtyping()) {
+        instructions += TranslateInstantiatedTypeArguments(type_args);
+        stub_id = SuspendInstr::StubId::kAwaitWithTypeCheck;
+      }
+    }
   }
 
   if (NeedsDebugStepCheck(parsed_function()->function(), pos)) {
     instructions += DebugStepCheck(pos);
   }
-  instructions += B->Suspend(pos, SuspendInstr::StubId::kAwait);
+  instructions += B->Suspend(pos, stub_id);
   return instructions;
 }
 
@@ -6381,10 +6391,9 @@
   compiler::ffi::NativeFunctionTypeFromFunctionType(zone_, native_sig, &error);
   ReportIfNotNull(error);
 
-  const Function& result = Function::ZoneHandle(
-      Z,
-      compiler::ffi::NativeCallbackFunction(
-          native_sig, target, exceptional_return, /*register_function=*/true));
+  const Function& result =
+      Function::ZoneHandle(Z, compiler::ffi::NativeCallbackFunction(
+                                  native_sig, target, exceptional_return));
   code += Constant(result);
 
   return code;
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index a3ea9b8..f1b7bfb 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -673,7 +673,7 @@
       ReadPosition();                    // read position.
       CalculateExpressionFingerprint();  // read operand.
       if (ReadTag() == kSomething) {
-        SkipDartType();  // read runtime check type.
+        CalculateDartTypeFingerprint();  // read runtime check type.
       }
       return;
     case kConstStaticInvocation:
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 57f0dcf..f155353 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -974,6 +974,7 @@
     case MethodRecognizer::kFfiLoadDouble:
     case MethodRecognizer::kFfiLoadDoubleUnaligned:
     case MethodRecognizer::kFfiLoadPointer:
+    case MethodRecognizer::kFfiNativeCallbackFunction:
     case MethodRecognizer::kFfiStoreInt8:
     case MethodRecognizer::kFfiStoreInt16:
     case MethodRecognizer::kFfiStoreInt32:
@@ -1279,6 +1280,14 @@
       ASSERT_EQUAL(function.NumParameters(), 0);
       body += IntConstant(static_cast<int64_t>(compiler::ffi::TargetAbi()));
       break;
+    case MethodRecognizer::kFfiNativeCallbackFunction: {
+      const auto& error = String::ZoneHandle(
+          Z, Symbols::New(thread_,
+                          "This function should be handled on call site."));
+      body += Constant(error);
+      body += ThrowException(TokenPosition::kNoSource);
+      break;
+    }
     case MethodRecognizer::kFfiLoadInt8:
     case MethodRecognizer::kFfiLoadInt16:
     case MethodRecognizer::kFfiLoadInt32:
@@ -4314,9 +4323,12 @@
 
 Fragment FlowGraphBuilder::Suspend(TokenPosition position,
                                    SuspendInstr::StubId stub_id) {
+  Value* type_args =
+      (stub_id == SuspendInstr::StubId::kAwaitWithTypeCheck) ? Pop() : nullptr;
+  Value* operand = Pop();
   SuspendInstr* instr =
-      new (Z) SuspendInstr(InstructionSource(position), stub_id, Pop(),
-                           GetNextDeoptId(), GetNextDeoptId());
+      new (Z) SuspendInstr(InstructionSource(position), stub_id, operand,
+                           type_args, GetNextDeoptId(), GetNextDeoptId());
   Push(instr);
   return Fragment(instr);
 }
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 523d86b..3c612d0 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -983,7 +983,7 @@
       helper_.ReadPosition();  // read position.
       VisitExpression();       // read operand.
       if (helper_.ReadTag() == kSomething) {
-        helper_.SkipDartType();  // read runtime check type.
+        VisitDartType();  // read runtime check type.
       }
       return;
     case kConstStaticInvocation:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index 049fc39..c3a2ecf 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -34,6 +34,7 @@
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 0xe8f6a107)              \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 0xf82a3634)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 0xaf2d0ce5)          \
+  V(_TypedList, _getFloat64x2, ByteArrayBaseGetFloat64x2, 0x545d2cc0)          \
   V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 0x5573740b)              \
   V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 0xe18943a2)                    \
   V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 0xaf59b748)                  \
@@ -46,6 +47,7 @@
   V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 0x2f362de0)              \
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 0x2359f8d2)              \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 0x38c6295a)          \
+  V(_TypedList, _setFloat64x2, ByteArrayBaseSetFloat64x2, 0xbaead73f)          \
   V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 0x5ce9025b)              \
   V(ByteData, ., ByteDataFactory, 0x91f05063)                                  \
   V(_ByteDataView, get:offsetInBytes, ByteDataViewOffsetInBytes, 0x60cef22c)   \
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index a1e5229..f3a6f54 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1274,6 +1274,7 @@
 
   static word suspend_state_init_async_entry_point_offset();
   static word suspend_state_await_entry_point_offset();
+  static word suspend_state_await_with_type_check_entry_point_offset();
   static word suspend_state_return_async_entry_point_offset();
   static word suspend_state_return_async_not_future_entry_point_offset();
 
@@ -1312,6 +1313,7 @@
   static word type_type_offset();
 
   static word suspend_state_await_offset();
+  static word suspend_state_await_with_type_check_offset();
   static word suspend_state_handle_exception_offset();
   static word suspend_state_init_async_offset();
   static word suspend_state_init_async_star_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 9a2059d..cbaa6ce 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -236,23 +236,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -288,9 +290,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    876;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     880;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    884;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -313,7 +315,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 916;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -330,7 +332,7 @@
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 920;
+    Thread_double_truncate_round_supported_offset = 924;
 static constexpr dart::compiler::target::word
     Thread_service_extension_stream_offset = 956;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -348,7 +350,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    896;
+    900;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -370,11 +372,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    884;
+    888;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    912;
+    916;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 960;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
@@ -429,11 +431,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 888;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 892;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 892;
+    Thread_saved_shadow_call_stack_offset = 896;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    900;
+    904;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -456,23 +458,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 844;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 844;
+    Thread_suspend_state_return_async_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 848;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 852;
+    Thread_suspend_state_init_async_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 856;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 860;
+    Thread_suspend_state_return_async_star_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 864;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 868;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 868;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 872;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 872;
+    Thread_suspend_state_handle_exception_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -485,9 +489,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 904;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 908;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 908;
+    Thread_callback_stack_return_offset = 912;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset = 928;
 static constexpr dart::compiler::target::word Thread_random_offset = 936;
 static constexpr dart::compiler::target::word
@@ -900,23 +904,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -953,9 +959,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1760;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1768;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1776;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -979,7 +985,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -992,13 +998,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1888;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1896;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1848;
+    Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1896;
+    Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -1014,7 +1020,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1800;
+    1808;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -1036,14 +1042,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -1096,11 +1102,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1784;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1792;
+    Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1808;
+    1816;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -1123,23 +1129,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1696;
+    Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1744;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -1153,14 +1161,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1824;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1856;
-static constexpr dart::compiler::target::word Thread_random_offset = 1864;
+    Thread_callback_stack_return_offset = 1832;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1864;
+static constexpr dart::compiler::target::word Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1872;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1568,23 +1576,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -1620,9 +1630,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    864;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     868;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    872;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -1645,7 +1655,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 904;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 908;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -1658,13 +1668,13 @@
     Thread_call_to_runtime_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 936;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 944;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 908;
+    Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 940;
+    Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     348;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 260;
@@ -1680,7 +1690,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    884;
+    888;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -1702,13 +1712,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    872;
+    876;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    900;
+    904;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 944;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 952;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -1761,11 +1771,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 876;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 880;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 880;
+    Thread_saved_shadow_call_stack_offset = 884;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    888;
+    892;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -1788,23 +1798,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 832;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 832;
+    Thread_suspend_state_return_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 840;
+    Thread_suspend_state_init_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 844;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 848;
+    Thread_suspend_state_return_async_star_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 852;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 856;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 860;
+    Thread_suspend_state_handle_exception_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -1817,14 +1829,14 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 892;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 912;
-static constexpr dart::compiler::target::word Thread_random_offset = 920;
+    Thread_callback_stack_return_offset = 900;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 920;
+static constexpr dart::compiler::target::word Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 360;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2232,23 +2244,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -2285,9 +2299,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1832;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1840;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1848;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -2311,7 +2325,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -2324,13 +2338,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1960;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1968;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1920;
+    Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1968;
+    Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -2346,7 +2360,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -2368,14 +2382,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -2428,11 +2442,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1856;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1864;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1864;
+    Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1880;
+    1888;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -2455,23 +2469,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1768;
+    Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1816;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -2485,14 +2501,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1928;
-static constexpr dart::compiler::target::word Thread_random_offset = 1936;
+    Thread_callback_stack_return_offset = 1904;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1936;
+static constexpr dart::compiler::target::word Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1944;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1952;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2901,23 +2917,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -2954,9 +2972,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1760;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1768;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1776;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -2980,7 +2998,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -2993,13 +3011,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1888;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1896;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1848;
+    Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1896;
+    Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -3015,7 +3033,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1800;
+    1808;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -3037,14 +3055,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -3097,11 +3115,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1784;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1792;
+    Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1808;
+    1816;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -3124,23 +3142,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1696;
+    Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1744;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -3154,14 +3174,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1824;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1856;
-static constexpr dart::compiler::target::word Thread_random_offset = 1864;
+    Thread_callback_stack_return_offset = 1832;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1864;
+static constexpr dart::compiler::target::word Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1872;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3569,23 +3589,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -3622,9 +3644,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1832;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1840;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1848;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -3648,7 +3670,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -3661,13 +3683,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1960;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1968;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1920;
+    Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1968;
+    Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -3683,7 +3705,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -3705,14 +3727,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -3765,11 +3787,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1856;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1864;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1864;
+    Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1880;
+    1888;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -3792,23 +3814,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1768;
+    Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1816;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -3822,14 +3846,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1928;
-static constexpr dart::compiler::target::word Thread_random_offset = 1936;
+    Thread_callback_stack_return_offset = 1904;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1936;
+static constexpr dart::compiler::target::word Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1944;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1952;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4238,23 +4262,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -4290,9 +4316,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    916;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     920;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    924;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -4315,7 +4341,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 956;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 960;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -4332,7 +4358,7 @@
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 960;
+    Thread_double_truncate_round_supported_offset = 964;
 static constexpr dart::compiler::target::word
     Thread_service_extension_stream_offset = 996;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4350,7 +4376,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    936;
+    940;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -4372,11 +4398,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    924;
+    928;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    952;
+    956;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1000;
@@ -4432,11 +4458,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 928;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 932;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 932;
+    Thread_saved_shadow_call_stack_offset = 936;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    940;
+    944;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -4459,23 +4485,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 880;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 884;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 884;
+    Thread_suspend_state_return_async_entry_point_offset = 888;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 888;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 892;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 892;
+    Thread_suspend_state_init_async_star_entry_point_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 896;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 900;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 900;
+    Thread_suspend_state_return_async_star_entry_point_offset = 904;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 904;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 908;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 908;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 912;
+    Thread_suspend_state_handle_exception_entry_point_offset = 916;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -4488,9 +4516,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 944;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 948;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 948;
+    Thread_callback_stack_return_offset = 952;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset = 968;
 static constexpr dart::compiler::target::word Thread_random_offset = 976;
 static constexpr dart::compiler::target::word
@@ -4905,23 +4933,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -4958,9 +4988,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1816;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1824;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1832;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -4984,7 +5014,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1896;
+    1904;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -4997,13 +5027,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1944;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1952;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1904;
+    Thread_double_truncate_round_supported_offset = 1912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1952;
+    Thread_service_extension_stream_offset = 1960;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -5019,7 +5049,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -5041,14 +5071,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -5101,11 +5131,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1840;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1848;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1848;
+    Thread_saved_shadow_call_stack_offset = 1856;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1864;
+    1872;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -5128,23 +5158,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1752;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1752;
+    Thread_suspend_state_return_async_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1760;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1768;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1768;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1776;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1792;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1800;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1808;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -5158,14 +5190,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1880;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1912;
-static constexpr dart::compiler::target::word Thread_random_offset = 1920;
+    Thread_callback_stack_return_offset = 1888;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1920;
+static constexpr dart::compiler::target::word Thread_random_offset = 1928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5568,23 +5600,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -5620,9 +5654,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    876;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     880;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    884;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -5645,7 +5679,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 916;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -5662,7 +5696,7 @@
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 920;
+    Thread_double_truncate_round_supported_offset = 924;
 static constexpr dart::compiler::target::word
     Thread_service_extension_stream_offset = 956;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -5680,7 +5714,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    896;
+    900;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -5702,11 +5736,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    884;
+    888;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    912;
+    916;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset = 960;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
@@ -5761,11 +5795,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 888;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 892;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 892;
+    Thread_saved_shadow_call_stack_offset = 896;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    900;
+    904;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -5788,23 +5822,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 844;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 844;
+    Thread_suspend_state_return_async_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 848;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 852;
+    Thread_suspend_state_init_async_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 856;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 860;
+    Thread_suspend_state_return_async_star_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 864;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 868;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 868;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 872;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 872;
+    Thread_suspend_state_handle_exception_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -5817,9 +5853,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 904;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 908;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 908;
+    Thread_callback_stack_return_offset = 912;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset = 928;
 static constexpr dart::compiler::target::word Thread_random_offset = 936;
 static constexpr dart::compiler::target::word
@@ -6224,23 +6260,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -6277,9 +6315,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1760;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1768;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1776;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -6303,7 +6341,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -6316,13 +6354,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1888;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1896;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1848;
+    Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1896;
+    Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -6338,7 +6376,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1800;
+    1808;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -6360,14 +6398,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -6420,11 +6458,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1784;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1792;
+    Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1808;
+    1816;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -6447,23 +6485,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1696;
+    Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1744;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -6477,14 +6517,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1824;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1856;
-static constexpr dart::compiler::target::word Thread_random_offset = 1864;
+    Thread_callback_stack_return_offset = 1832;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1864;
+static constexpr dart::compiler::target::word Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1872;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6884,23 +6924,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -6936,9 +6978,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    864;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     868;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    872;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -6961,7 +7003,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 904;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 908;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -6974,13 +7016,13 @@
     Thread_call_to_runtime_entry_point_offset = 308;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 936;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 944;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 908;
+    Thread_double_truncate_round_supported_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 940;
+    Thread_service_extension_stream_offset = 948;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     348;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 260;
@@ -6996,7 +7038,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    884;
+    888;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -7018,13 +7060,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    872;
+    876;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    900;
+    904;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 944;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 952;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -7077,11 +7119,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 876;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 880;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 880;
+    Thread_saved_shadow_call_stack_offset = 884;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    888;
+    892;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -7104,23 +7146,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 828;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 832;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 832;
+    Thread_suspend_state_return_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 836;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 840;
+    Thread_suspend_state_init_async_star_entry_point_offset = 844;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 844;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 848;
+    Thread_suspend_state_return_async_star_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 852;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 856;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 860;
+    Thread_suspend_state_handle_exception_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -7133,14 +7177,14 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 892;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 912;
-static constexpr dart::compiler::target::word Thread_random_offset = 920;
+    Thread_callback_stack_return_offset = 900;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 920;
+static constexpr dart::compiler::target::word Thread_random_offset = 928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 360;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7540,23 +7584,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -7593,9 +7639,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1832;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1840;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1848;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -7619,7 +7665,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -7632,13 +7678,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1960;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1968;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1920;
+    Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1968;
+    Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -7654,7 +7700,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -7676,14 +7722,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -7736,11 +7782,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1856;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1864;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1864;
+    Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1880;
+    1888;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -7763,23 +7809,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1768;
+    Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1816;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -7793,14 +7841,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1928;
-static constexpr dart::compiler::target::word Thread_random_offset = 1936;
+    Thread_callback_stack_return_offset = 1904;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1936;
+static constexpr dart::compiler::target::word Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1944;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1952;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8201,23 +8249,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -8254,9 +8304,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1760;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1768;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1776;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -8280,7 +8330,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -8293,13 +8343,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1888;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1896;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1848;
+    Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1896;
+    Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -8315,7 +8365,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1800;
+    1808;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -8337,14 +8387,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1776;
+    1784;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -8397,11 +8447,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1784;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1792;
+    Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1808;
+    1816;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -8424,23 +8474,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1696;
+    Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1744;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -8454,14 +8506,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1824;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1856;
-static constexpr dart::compiler::target::word Thread_random_offset = 1864;
+    Thread_callback_stack_return_offset = 1832;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1864;
+static constexpr dart::compiler::target::word Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1872;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1880;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8861,23 +8913,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -8914,9 +8968,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1832;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1840;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1848;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -8940,7 +8994,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -8953,13 +9007,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1960;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1968;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1920;
+    Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1968;
+    Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -8975,7 +9029,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -8997,14 +9051,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1848;
+    1856;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -9057,11 +9111,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1856;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1864;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1864;
+    Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1880;
+    1888;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -9084,23 +9138,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1768;
+    Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1816;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1824;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -9114,14 +9170,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1896;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1928;
-static constexpr dart::compiler::target::word Thread_random_offset = 1936;
+    Thread_callback_stack_return_offset = 1904;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1936;
+static constexpr dart::compiler::target::word Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1944;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1952;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9522,23 +9578,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 556;
+    ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 536;
+    ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 548;
+    ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 528;
+    ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 544;
+    ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 540;
+    ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 12;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 4;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset = 8;
@@ -9574,9 +9632,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    916;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     920;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    924;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -9599,7 +9657,7 @@
     Thread_allocate_object_slow_entry_point_offset = 328;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 212;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 956;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 960;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -9616,7 +9674,7 @@
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 960;
+    Thread_double_truncate_round_supported_offset = 964;
 static constexpr dart::compiler::target::word
     Thread_service_extension_stream_offset = 996;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -9634,7 +9692,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    936;
+    940;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -9656,11 +9714,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    924;
+    928;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    952;
+    956;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
     1000;
@@ -9716,11 +9774,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 928;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 932;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 932;
+    Thread_saved_shadow_call_stack_offset = 936;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    940;
+    944;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -9743,23 +9801,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 880;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 884;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 884;
+    Thread_suspend_state_return_async_entry_point_offset = 888;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 888;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 892;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 892;
+    Thread_suspend_state_init_async_star_entry_point_offset = 896;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 896;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 900;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 900;
+    Thread_suspend_state_return_async_star_entry_point_offset = 904;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 904;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 908;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 908;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 912;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 912;
+    Thread_suspend_state_handle_exception_entry_point_offset = 916;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word Thread_top_offset = 48;
@@ -9772,9 +9832,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     32;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 944;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 948;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 948;
+    Thread_callback_stack_return_offset = 952;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset = 968;
 static constexpr dart::compiler::target::word Thread_random_offset = 976;
 static constexpr dart::compiler::target::word
@@ -10181,23 +10241,25 @@
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 1112;
+    ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 1072;
+    ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 1056;
+    ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 1088;
+    ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 16;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 8;
 static constexpr dart::compiler::target::word Pointer_type_arguments_offset =
@@ -10234,9 +10296,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1816;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1824;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1832;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -10260,7 +10322,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1896;
+    1904;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -10273,13 +10335,13 @@
     Thread_call_to_runtime_entry_point_offset = 600;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 272;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1944;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1952;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 1904;
+    Thread_double_truncate_round_supported_offset = 1912;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 1952;
+    Thread_service_extension_stream_offset = 1960;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 504;
@@ -10295,7 +10357,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -10317,14 +10379,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1832;
+    1840;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -10377,11 +10439,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 208;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 744;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1840;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1848;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1848;
+    Thread_saved_shadow_call_stack_offset = 1856;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1864;
+    1872;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -10404,23 +10466,25 @@
 static constexpr dart::compiler::target::word
     Thread_suspend_state_await_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
+    Thread_suspend_state_await_with_type_check_entry_point_offset = 1752;
+static constexpr dart::compiler::target::word
     Thread_suspend_state_init_async_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_entry_point_offset = 1752;
+    Thread_suspend_state_return_async_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_not_future_entry_point_offset = 1760;
+    Thread_suspend_state_return_async_not_future_entry_point_offset = 1768;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_async_star_entry_point_offset = 1768;
+    Thread_suspend_state_init_async_star_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_yield_async_star_entry_point_offset = 1776;
+    Thread_suspend_state_yield_async_star_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_return_async_star_entry_point_offset = 1784;
+    Thread_suspend_state_return_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_init_sync_star_entry_point_offset = 1792;
+    Thread_suspend_state_init_sync_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1800;
+    Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    Thread_suspend_state_handle_exception_entry_point_offset = 1808;
+    Thread_suspend_state_handle_exception_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word Thread_top_offset = 96;
@@ -10434,14 +10498,14 @@
     64;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1880;
-static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1912;
-static constexpr dart::compiler::target::word Thread_random_offset = 1920;
+    Thread_callback_stack_return_offset = 1888;
+static constexpr dart::compiler::target::word Thread_next_task_id_offset = 1920;
+static constexpr dart::compiler::target::word Thread_random_offset = 1928;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 704;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1928;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1936;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -10875,23 +10939,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 556;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 536;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 548;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 528;
+    AOT_ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 544;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 540;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -10932,9 +10998,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 876;
+    AOT_Thread_active_exception_offset = 880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 880;
+    AOT_Thread_active_stacktrace_offset = 884;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -10958,7 +11024,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    916;
+    920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -10977,7 +11043,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 920;
+    AOT_Thread_double_truncate_round_supported_offset = 924;
 static constexpr dart::compiler::target::word
     AOT_Thread_service_extension_stream_offset = 956;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -10996,7 +11062,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 896;
+    AOT_Thread_execution_state_offset = 900;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -11018,11 +11084,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 884;
+    AOT_Thread_global_object_pool_offset = 888;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 912;
+    AOT_Thread_exit_through_ffi_offset = 916;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     960;
@@ -11081,11 +11147,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 888;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 892;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 892;
+    AOT_Thread_saved_shadow_call_stack_offset = 896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 900;
+    AOT_Thread_safepoint_state_offset = 904;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -11109,24 +11175,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 844;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 844;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 848;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 852;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 856;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 860;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 864;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 868;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        868;
+        872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 872;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -11141,9 +11209,9 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    904;
+    908;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 908;
+    AOT_Thread_callback_stack_return_offset = 912;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
     928;
 static constexpr dart::compiler::target::word AOT_Thread_random_offset = 936;
@@ -11613,23 +11681,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -11671,9 +11741,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1760;
+    AOT_Thread_active_exception_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1768;
+    AOT_Thread_active_stacktrace_offset = 1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -11697,7 +11767,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -11712,13 +11782,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1848;
+    AOT_Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1896;
+    AOT_Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -11735,7 +11805,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1800;
+    AOT_Thread_execution_state_offset = 1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -11757,14 +11827,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1776;
+    AOT_Thread_global_object_pool_offset = 1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1832;
+    AOT_Thread_exit_through_ffi_offset = 1840;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -11821,11 +11891,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1784;
+    1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1792;
+    AOT_Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1808;
+    AOT_Thread_safepoint_state_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -11849,24 +11919,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1696;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1744;
+        1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -11881,16 +11953,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1824;
+    AOT_Thread_callback_stack_return_offset = 1832;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1856;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1864;
+    1864;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -12358,23 +12430,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -12416,9 +12490,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1832;
+    AOT_Thread_active_exception_offset = 1840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1840;
+    AOT_Thread_active_stacktrace_offset = 1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -12442,7 +12516,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -12457,13 +12531,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1920;
+    AOT_Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1968;
+    AOT_Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -12480,7 +12554,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1872;
+    AOT_Thread_execution_state_offset = 1880;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -12502,14 +12576,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1848;
+    AOT_Thread_global_object_pool_offset = 1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1904;
+    AOT_Thread_exit_through_ffi_offset = 1912;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -12566,11 +12640,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1864;
+    AOT_Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1880;
+    AOT_Thread_safepoint_state_offset = 1888;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -12594,24 +12668,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1816;
+        1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -12626,16 +12702,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1896;
+    AOT_Thread_callback_stack_return_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1928;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1936;
+    1936;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13101,23 +13177,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -13159,9 +13237,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1760;
+    AOT_Thread_active_exception_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1768;
+    AOT_Thread_active_stacktrace_offset = 1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -13185,7 +13263,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -13200,13 +13278,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1848;
+    AOT_Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1896;
+    AOT_Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13223,7 +13301,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1800;
+    AOT_Thread_execution_state_offset = 1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -13245,14 +13323,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1776;
+    AOT_Thread_global_object_pool_offset = 1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1832;
+    AOT_Thread_exit_through_ffi_offset = 1840;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -13309,11 +13387,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1784;
+    1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1792;
+    AOT_Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1808;
+    AOT_Thread_safepoint_state_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -13337,24 +13415,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1696;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1744;
+        1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -13369,16 +13449,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1824;
+    AOT_Thread_callback_stack_return_offset = 1832;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1856;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1864;
+    1864;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -13843,23 +13923,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -13901,9 +13983,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1832;
+    AOT_Thread_active_exception_offset = 1840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1840;
+    AOT_Thread_active_stacktrace_offset = 1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -13927,7 +14009,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -13942,13 +14024,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1920;
+    AOT_Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1968;
+    AOT_Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13965,7 +14047,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1872;
+    AOT_Thread_execution_state_offset = 1880;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -13987,14 +14069,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1848;
+    AOT_Thread_global_object_pool_offset = 1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1904;
+    AOT_Thread_exit_through_ffi_offset = 1912;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -14051,11 +14133,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1864;
+    AOT_Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1880;
+    AOT_Thread_safepoint_state_offset = 1888;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -14079,24 +14161,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1816;
+        1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -14111,16 +14195,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1896;
+    AOT_Thread_callback_stack_return_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1928;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1936;
+    1936;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -14585,23 +14669,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 556;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 536;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 548;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 528;
+    AOT_ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 544;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 540;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -14642,9 +14728,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 916;
+    AOT_Thread_active_exception_offset = 920;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 920;
+    AOT_Thread_active_stacktrace_offset = 924;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -14668,7 +14754,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    956;
+    960;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -14687,7 +14773,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 960;
+    AOT_Thread_double_truncate_round_supported_offset = 964;
 static constexpr dart::compiler::target::word
     AOT_Thread_service_extension_stream_offset = 996;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -14706,7 +14792,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 936;
+    AOT_Thread_execution_state_offset = 940;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -14728,11 +14814,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 924;
+    AOT_Thread_global_object_pool_offset = 928;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 952;
+    AOT_Thread_exit_through_ffi_offset = 956;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1000;
@@ -14791,11 +14877,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 928;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 932;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 932;
+    AOT_Thread_saved_shadow_call_stack_offset = 936;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 940;
+    AOT_Thread_safepoint_state_offset = 944;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -14819,24 +14905,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 880;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 884;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 884;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 888;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 888;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 892;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 892;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 896;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 900;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 900;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 904;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 904;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 908;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        908;
+        912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 912;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 916;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -14851,9 +14939,9 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    944;
+    948;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 948;
+    AOT_Thread_callback_stack_return_offset = 952;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
     968;
 static constexpr dart::compiler::target::word AOT_Thread_random_offset = 976;
@@ -15325,23 +15413,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -15383,9 +15473,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1816;
+    AOT_Thread_active_exception_offset = 1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1824;
+    AOT_Thread_active_stacktrace_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -15409,7 +15499,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1896;
+    1904;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -15424,13 +15514,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1904;
+    AOT_Thread_double_truncate_round_supported_offset = 1912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1952;
+    AOT_Thread_service_extension_stream_offset = 1960;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15447,7 +15537,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1856;
+    AOT_Thread_execution_state_offset = 1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -15469,14 +15559,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1832;
+    AOT_Thread_global_object_pool_offset = 1840;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1888;
+    AOT_Thread_exit_through_ffi_offset = 1896;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -15533,11 +15623,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1848;
+    AOT_Thread_saved_shadow_call_stack_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1864;
+    AOT_Thread_safepoint_state_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -15561,24 +15651,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1752;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1760;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1800;
+        1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -15593,16 +15685,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1880;
+    AOT_Thread_callback_stack_return_offset = 1888;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1912;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1920;
+    1920;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1928;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1928;
+    1936;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -16060,23 +16152,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 556;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 536;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 548;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 528;
+    AOT_ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 544;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 540;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -16117,9 +16211,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 876;
+    AOT_Thread_active_exception_offset = 880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 880;
+    AOT_Thread_active_stacktrace_offset = 884;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -16143,7 +16237,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    916;
+    920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -16162,7 +16256,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 920;
+    AOT_Thread_double_truncate_round_supported_offset = 924;
 static constexpr dart::compiler::target::word
     AOT_Thread_service_extension_stream_offset = 956;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -16181,7 +16275,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 896;
+    AOT_Thread_execution_state_offset = 900;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -16203,11 +16297,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 884;
+    AOT_Thread_global_object_pool_offset = 888;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 912;
+    AOT_Thread_exit_through_ffi_offset = 916;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     960;
@@ -16266,11 +16360,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 888;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 892;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 892;
+    AOT_Thread_saved_shadow_call_stack_offset = 896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 900;
+    AOT_Thread_safepoint_state_offset = 904;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -16294,24 +16388,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 840;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 844;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 836;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 844;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 848;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 852;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 852;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 856;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 860;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 860;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 864;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 868;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        868;
+        872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 872;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -16326,9 +16422,9 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    904;
+    908;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 908;
+    AOT_Thread_callback_stack_return_offset = 912;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
     928;
 static constexpr dart::compiler::target::word AOT_Thread_random_offset = 936;
@@ -16789,23 +16885,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -16847,9 +16945,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1760;
+    AOT_Thread_active_exception_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1768;
+    AOT_Thread_active_stacktrace_offset = 1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -16873,7 +16971,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -16888,13 +16986,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1848;
+    AOT_Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1896;
+    AOT_Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16911,7 +17009,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1800;
+    AOT_Thread_execution_state_offset = 1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -16933,14 +17031,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1776;
+    AOT_Thread_global_object_pool_offset = 1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1832;
+    AOT_Thread_exit_through_ffi_offset = 1840;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -16997,11 +17095,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1784;
+    1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1792;
+    AOT_Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1808;
+    AOT_Thread_safepoint_state_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -17025,24 +17123,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1696;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1744;
+        1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -17057,16 +17157,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1824;
+    AOT_Thread_callback_stack_return_offset = 1832;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1856;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1864;
+    1864;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -17525,23 +17625,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -17583,9 +17685,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1832;
+    AOT_Thread_active_exception_offset = 1840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1840;
+    AOT_Thread_active_stacktrace_offset = 1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -17609,7 +17711,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -17624,13 +17726,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1920;
+    AOT_Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1968;
+    AOT_Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17647,7 +17749,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1872;
+    AOT_Thread_execution_state_offset = 1880;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -17669,14 +17771,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1848;
+    AOT_Thread_global_object_pool_offset = 1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1904;
+    AOT_Thread_exit_through_ffi_offset = 1912;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -17733,11 +17835,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1864;
+    AOT_Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1880;
+    AOT_Thread_safepoint_state_offset = 1888;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -17761,24 +17863,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1816;
+        1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -17793,16 +17897,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1896;
+    AOT_Thread_callback_stack_return_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1928;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1936;
+    1936;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18259,23 +18363,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -18317,9 +18423,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1760;
+    AOT_Thread_active_exception_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1768;
+    AOT_Thread_active_stacktrace_offset = 1776;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -18343,7 +18449,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -18358,13 +18464,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1848;
+    AOT_Thread_double_truncate_round_supported_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1896;
+    AOT_Thread_service_extension_stream_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18381,7 +18487,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1800;
+    AOT_Thread_execution_state_offset = 1808;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -18403,14 +18509,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1776;
+    AOT_Thread_global_object_pool_offset = 1784;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1832;
+    AOT_Thread_exit_through_ffi_offset = 1840;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1904;
+    1912;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -18467,11 +18573,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1784;
+    1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1792;
+    AOT_Thread_saved_shadow_call_stack_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1808;
+    AOT_Thread_safepoint_state_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -18495,24 +18601,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1688;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1696;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1680;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1696;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1704;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1712;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1712;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1720;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1728;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1736;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1744;
+        1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -18527,16 +18635,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1816;
+    1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1824;
+    AOT_Thread_callback_stack_return_offset = 1832;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1856;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1864;
+    1864;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -18992,23 +19100,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -19050,9 +19160,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1832;
+    AOT_Thread_active_exception_offset = 1840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1840;
+    AOT_Thread_active_stacktrace_offset = 1848;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -19076,7 +19186,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1912;
+    1920;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -19091,13 +19201,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1920;
+    AOT_Thread_double_truncate_round_supported_offset = 1928;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1968;
+    AOT_Thread_service_extension_stream_offset = 1976;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19114,7 +19224,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1872;
+    AOT_Thread_execution_state_offset = 1880;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -19136,14 +19246,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1848;
+    AOT_Thread_global_object_pool_offset = 1856;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1904;
+    AOT_Thread_exit_through_ffi_offset = 1912;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1976;
+    1984;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -19200,11 +19310,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1856;
+    1864;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1864;
+    AOT_Thread_saved_shadow_call_stack_offset = 1872;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1880;
+    AOT_Thread_safepoint_state_offset = 1888;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -19228,24 +19338,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1768;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1752;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1800;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1816;
+        1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1824;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -19260,16 +19372,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1888;
+    1896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1896;
+    AOT_Thread_callback_stack_return_offset = 1904;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1928;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1936;
+    1936;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1944;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
@@ -19725,23 +19837,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 524;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 556;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 528;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 560;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 536;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 540;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 548;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 528;
+    AOT_ObjectStore_suspend_state_return_async_offset = 532;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 532;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 536;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 544;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 548;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 552;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 556;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 540;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 544;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     12;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 4;
@@ -19782,9 +19896,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 412;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 916;
+    AOT_Thread_active_exception_offset = 920;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 920;
+    AOT_Thread_active_stacktrace_offset = 924;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 304;
 static constexpr dart::compiler::target::word
@@ -19808,7 +19922,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 212;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    956;
+    960;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 216;
 static constexpr dart::compiler::target::word
@@ -19827,7 +19941,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 44;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 960;
+    AOT_Thread_double_truncate_round_supported_offset = 964;
 static constexpr dart::compiler::target::word
     AOT_Thread_service_extension_stream_offset = 996;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -19846,7 +19960,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 284;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 936;
+    AOT_Thread_execution_state_offset = 940;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 288;
 static constexpr dart::compiler::target::word
@@ -19868,11 +19982,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 408;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 924;
+    AOT_Thread_global_object_pool_offset = 928;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 140;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 952;
+    AOT_Thread_exit_through_ffi_offset = 956;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
     1000;
@@ -19931,11 +20045,11 @@
     112;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 380;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 928;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 932;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 932;
+    AOT_Thread_saved_shadow_call_stack_offset = 936;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 940;
+    AOT_Thread_safepoint_state_offset = 944;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 276;
 static constexpr dart::compiler::target::word
@@ -19959,24 +20073,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 880;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 884;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 876;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 884;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 888;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 888;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 892;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 892;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 896;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 896;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 900;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 900;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 904;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 904;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 908;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        908;
+        912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 912;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 916;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 76;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 48;
@@ -19991,9 +20107,9 @@
     AOT_Thread_write_barrier_mask_offset = 32;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    944;
+    948;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 948;
+    AOT_Thread_callback_stack_return_offset = 952;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
     968;
 static constexpr dart::compiler::target::word AOT_Thread_random_offset = 976;
@@ -20456,23 +20572,25 @@
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_await_offset = 1048;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 1112;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 1056;
+static constexpr dart::compiler::target::word
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 1120;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_suspend_state_init_async_offset = 1040;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 1072;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 1080;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1096;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 1104;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 1056;
+    AOT_ObjectStore_suspend_state_return_async_offset = 1064;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1064;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 1072;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 1088;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 1096;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1104;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 1112;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1080;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 1088;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     16;
 static constexpr dart::compiler::target::word AOT_PointerBase_data_offset = 8;
@@ -20514,9 +20632,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1816;
+    AOT_Thread_active_exception_offset = 1824;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1824;
+    AOT_Thread_active_stacktrace_offset = 1832;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_entry_point_offset = 592;
 static constexpr dart::compiler::target::word
@@ -20540,7 +20658,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 408;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1896;
+    1904;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 416;
 static constexpr dart::compiler::target::word
@@ -20555,13 +20673,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 272;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1944;
+    1952;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 88;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 1904;
+    AOT_Thread_double_truncate_round_supported_offset = 1912;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 1952;
+    AOT_Thread_service_extension_stream_offset = 1960;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     680;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -20578,7 +20696,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 552;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1856;
+    AOT_Thread_execution_state_offset = 1864;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 560;
 static constexpr dart::compiler::target::word
@@ -20600,14 +20718,14 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 800;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1832;
+    AOT_Thread_global_object_pool_offset = 1840;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 264;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1888;
+    AOT_Thread_exit_through_ffi_offset = 1896;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1960;
+    1968;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -20664,11 +20782,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 744;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1840;
+    1848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1848;
+    AOT_Thread_saved_shadow_call_stack_offset = 1856;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1864;
+    AOT_Thread_safepoint_state_offset = 1872;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 536;
 static constexpr dart::compiler::target::word
@@ -20692,24 +20810,26 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_await_entry_point_offset = 1744;
 static constexpr dart::compiler::target::word
+    AOT_Thread_suspend_state_await_with_type_check_entry_point_offset = 1752;
+static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_init_async_entry_point_offset = 1736;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_entry_point_offset = 1752;
+    AOT_Thread_suspend_state_return_async_entry_point_offset = 1760;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1760;
+    AOT_Thread_suspend_state_return_async_not_future_entry_point_offset = 1768;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1768;
+    AOT_Thread_suspend_state_init_async_star_entry_point_offset = 1776;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1776;
+    AOT_Thread_suspend_state_yield_async_star_entry_point_offset = 1784;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1784;
+    AOT_Thread_suspend_state_return_async_star_entry_point_offset = 1792;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1792;
+    AOT_Thread_suspend_state_init_sync_star_entry_point_offset = 1800;
 static constexpr dart::compiler::target::word
     AOT_Thread_suspend_state_suspend_sync_star_at_start_entry_point_offset =
-        1800;
+        1808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1808;
+    AOT_Thread_suspend_state_handle_exception_entry_point_offset = 1816;
 static constexpr dart::compiler::target::word
     AOT_Thread_top_exit_frame_info_offset = 152;
 static constexpr dart::compiler::target::word AOT_Thread_top_offset = 96;
@@ -20724,16 +20844,16 @@
     AOT_Thread_write_barrier_mask_offset = 64;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1872;
+    1880;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1880;
+    AOT_Thread_callback_stack_return_offset = 1888;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    1912;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1920;
+    1920;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1928;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 704;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    1928;
+    1936;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0;
 static constexpr dart::compiler::target::word
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index c290e78..8e18ab9 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -182,6 +182,7 @@
   FIELD(ObjectStore, string_type_offset)                                       \
   FIELD(ObjectStore, type_type_offset)                                         \
   FIELD(ObjectStore, suspend_state_await_offset)                               \
+  FIELD(ObjectStore, suspend_state_await_with_type_check_offset)               \
   FIELD(ObjectStore, suspend_state_handle_exception_offset)                    \
   FIELD(ObjectStore, suspend_state_init_async_offset)                          \
   FIELD(ObjectStore, suspend_state_init_async_star_offset)                     \
@@ -306,6 +307,7 @@
   FIELD(Thread, stack_overflow_shared_without_fpu_regs_stub_offset)            \
   FIELD(Thread, store_buffer_block_offset)                                     \
   FIELD(Thread, suspend_state_await_entry_point_offset)                        \
+  FIELD(Thread, suspend_state_await_with_type_check_entry_point_offset)        \
   FIELD(Thread, suspend_state_init_async_entry_point_offset)                   \
   FIELD(Thread, suspend_state_return_async_entry_point_offset)                 \
   FIELD(Thread, suspend_state_return_async_not_future_entry_point_offset)      \
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index c30dc9b..335d9ea 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -1892,9 +1892,11 @@
 void StubCodeCompiler::GenerateSuspendStub(
     Assembler* assembler,
     bool call_suspend_function,
+    bool pass_type_arguments,
     intptr_t suspend_entry_point_offset_in_thread,
     intptr_t suspend_function_offset_in_object_store) {
   const Register kArgument = SuspendStubABI::kArgumentReg;
+  const Register kTypeArgs = SuspendStubABI::kTypeArgsReg;
   const Register kTemp = SuspendStubABI::kTempReg;
   const Register kFrameSize = SuspendStubABI::kFrameSizeReg;
   const Register kSuspendState = SuspendStubABI::kSuspendStateReg;
@@ -1917,6 +1919,10 @@
 
   __ EnterStubFrame();
 
+  if (pass_type_arguments) {
+    __ PushRegister(kTypeArgs);
+  }
+
   __ CompareClassId(kSuspendState, kSuspendStateCid, kTemp);
 
   if (FLAG_precompiled_mode) {
@@ -2042,8 +2048,14 @@
   __ Bind(&call_dart);
   if (call_suspend_function) {
     __ Comment("Call suspend Dart function");
+    if (pass_type_arguments) {
+      __ LoadObject(ARGS_DESC_REG,
+                    ArgumentsDescriptorBoxed(/*type_args_len=*/1,
+                                             /*num_arguments=*/2));
+    }
     CallDartCoreLibraryFunction(assembler, suspend_entry_point_offset_in_thread,
-                                suspend_function_offset_in_object_store);
+                                suspend_function_offset_in_object_store,
+                                /*uses_args_desc=*/pass_type_arguments);
   } else {
     // SuspendStub returns either the result of Dart callback,
     // or SuspendStub argument (if Dart callback is not used).
@@ -2137,14 +2149,25 @@
 void StubCodeCompiler::GenerateAwaitStub(Assembler* assembler) {
   GenerateSuspendStub(assembler,
                       /*call_suspend_function=*/true,
+                      /*pass_type_arguments=*/false,
                       target::Thread::suspend_state_await_entry_point_offset(),
                       target::ObjectStore::suspend_state_await_offset());
 }
 
+void StubCodeCompiler::GenerateAwaitWithTypeCheckStub(Assembler* assembler) {
+  GenerateSuspendStub(
+      assembler,
+      /*call_suspend_function=*/true,
+      /*pass_type_arguments=*/true,
+      target::Thread::suspend_state_await_with_type_check_entry_point_offset(),
+      target::ObjectStore::suspend_state_await_with_type_check_offset());
+}
+
 void StubCodeCompiler::GenerateYieldAsyncStarStub(Assembler* assembler) {
   GenerateSuspendStub(
       assembler,
       /*call_suspend_function=*/true,
+      /*pass_type_arguments=*/false,
       target::Thread::suspend_state_yield_async_star_entry_point_offset(),
       target::ObjectStore::suspend_state_yield_async_star_offset());
 }
@@ -2154,6 +2177,7 @@
   GenerateSuspendStub(
       assembler,
       /*call_suspend_function=*/true,
+      /*pass_type_arguments=*/false,
       target::Thread::
           suspend_state_suspend_sync_star_at_start_entry_point_offset(),
       target::ObjectStore::suspend_state_suspend_sync_star_at_start_offset());
@@ -2162,7 +2186,8 @@
 void StubCodeCompiler::GenerateSuspendSyncStarAtYieldStub(
     Assembler* assembler) {
   GenerateSuspendStub(assembler,
-                      /*call_suspend_function=*/false, -1, -1);
+                      /*call_suspend_function=*/false,
+                      /*pass_type_arguments=*/false, -1, -1);
 }
 
 void StubCodeCompiler::GenerateInitSuspendableFunctionStub(
diff --git a/runtime/vm/compiler/stub_code_compiler.h b/runtime/vm/compiler/stub_code_compiler.h
index 1707063..73e2027 100644
--- a/runtime/vm/compiler/stub_code_compiler.h
+++ b/runtime/vm/compiler/stub_code_compiler.h
@@ -207,6 +207,7 @@
   static void GenerateSuspendStub(
       Assembler* assembler,
       bool call_suspend_function,
+      bool pass_type_arguments,
       intptr_t suspend_entry_point_offset_in_thread,
       intptr_t suspend_function_offset_in_object_store);
   static void GenerateInitSuspendableFunctionStub(
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 2bf84c6..c9a7139 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -573,10 +573,11 @@
   static const Register kResultReg = R0;
 };
 
-// ABI for SuspendStub (AwaitStub, YieldAsyncStarStub,
+// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
 // SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
 struct SuspendStubABI {
   static const Register kArgumentReg = R0;
+  static const Register kTypeArgsReg = R1;  // Can be the same as kTempReg
   static const Register kTempReg = R1;
   static const Register kFrameSizeReg = R2;
   static const Register kSuspendStateReg = R3;
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 1e12a6c..6c70b20 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -403,10 +403,11 @@
   static const Register kResultReg = R0;
 };
 
-// ABI for SuspendStub (AwaitStub, YieldAsyncStarStub,
+// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
 // SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
 struct SuspendStubABI {
   static const Register kArgumentReg = R0;
+  static const Register kTypeArgsReg = R1;  // Can be the same as kTempReg
   static const Register kTempReg = R1;
   static const Register kFrameSizeReg = R2;
   static const Register kSuspendStateReg = R3;
diff --git a/runtime/vm/constants_ia32.h b/runtime/vm/constants_ia32.h
index 8c177ef..0bb45c9 100644
--- a/runtime/vm/constants_ia32.h
+++ b/runtime/vm/constants_ia32.h
@@ -292,10 +292,11 @@
   static const Register kResultReg = EAX;
 };
 
-// ABI for SuspendStub (AwaitStub, YieldAsyncStarStub,
+// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
 // SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
 struct SuspendStubABI {
   static const Register kArgumentReg = EAX;
+  static const Register kTypeArgsReg = EDX;  // Can be the same as kTempReg
   static const Register kTempReg = EDX;
   static const Register kFrameSizeReg = ECX;
   static const Register kSuspendStateReg = EBX;
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index 15d2285..029a7d4 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -412,10 +412,11 @@
   static constexpr Register kResultReg = A0;
 };
 
-// ABI for SuspendStub (AwaitStub, YieldAsyncStarStub,
+// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
 // SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
 struct SuspendStubABI {
   static const Register kArgumentReg = A0;
+  static const Register kTypeArgsReg = T0;  // Can be the same as kTempReg
   static const Register kTempReg = T0;
   static const Register kFrameSizeReg = T1;
   static const Register kSuspendStateReg = T2;
diff --git a/runtime/vm/constants_x64.h b/runtime/vm/constants_x64.h
index 7f27b54..802007f 100644
--- a/runtime/vm/constants_x64.h
+++ b/runtime/vm/constants_x64.h
@@ -373,10 +373,11 @@
   static const Register kResultReg = RAX;
 };
 
-// ABI for SuspendStub (AwaitStub, YieldAsyncStarStub,
+// ABI for SuspendStub (AwaitStub, AwaitWithTypeCheckStub, YieldAsyncStarStub,
 // SuspendSyncStarAtStartStub, SuspendSyncStarAtYieldStub).
 struct SuspendStubABI {
   static const Register kArgumentReg = RAX;
+  static const Register kTypeArgsReg = RDX;  // Can be the same as kTempReg
   static const Register kTempReg = RDX;
   static const Register kFrameSizeReg = RCX;
   static const Register kSuspendStateReg = RBX;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 443f38f..6174144 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8054,22 +8054,27 @@
 
 int32_t Function::FfiCallbackId() const {
   ASSERT(IsFfiTrampoline());
-  if (FfiCallbackTarget() == Object::null()) {
-    return -1;
-  }
-  const Object& obj = Object::Handle(data());
+  ASSERT(FfiCallbackTarget() != Object::null());
+
+  const auto& obj = Object::Handle(data());
   ASSERT(!obj.IsNull());
-  const FfiTrampolineData& trampoline_data = FfiTrampolineData::Cast(obj);
-  int32_t callback_id = trampoline_data.callback_id();
-#if defined(DART_PRECOMPILED_RUNTIME)
-  ASSERT(callback_id >= 0);
-#else
-  if (callback_id < 0) {
-    callback_id = Thread::Current()->AllocateFfiCallbackId();
-    trampoline_data.set_callback_id(callback_id);
-  }
-#endif
-  return callback_id;
+  const auto& trampoline_data = FfiTrampolineData::Cast(obj);
+
+  ASSERT(trampoline_data.callback_id() != -1);
+
+  return trampoline_data.callback_id();
+}
+
+void Function::AssignFfiCallbackId(int32_t callback_id) const {
+  ASSERT(IsFfiTrampoline());
+  ASSERT(FfiCallbackTarget() != Object::null());
+
+  const auto& obj = Object::Handle(data());
+  ASSERT(!obj.IsNull());
+  const auto& trampoline_data = FfiTrampolineData::Cast(obj);
+
+  ASSERT(trampoline_data.callback_id() == -1);
+  trampoline_data.set_callback_id(callback_id);
 }
 
 bool Function::FfiIsLeaf() const {
@@ -25911,6 +25916,19 @@
   return result.ptr();
 }
 
+TypedDataPtr TypedData::Grow(const TypedData& current,
+                             intptr_t len,
+                             Heap::Space space) {
+  ASSERT(len > current.Length());
+  const auto& new_td =
+      TypedData::Handle(TypedData::New(current.GetClassId(), len, space));
+  {
+    NoSafepointScope no_safepoint_scope;
+    memcpy(new_td.DataAddr(0), current.DataAddr(0), current.LengthInBytes());
+  }
+  return new_td.ptr();
+}
+
 const char* TypedData::ToCString() const {
   const Class& cls = Class::Handle(clazz());
   return cls.ScrubbedNameCString();
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index df49d11..ac6664a 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2769,6 +2769,9 @@
   // -1 for Dart -> native calls.
   int32_t FfiCallbackId() const;
 
+  // Should be called when ffi trampoline function object is created.
+  void AssignFfiCallbackId(int32_t callback_id) const;
+
   // Can only be called on FFI trampolines.
   bool FfiIsLeaf() const;
 
@@ -11227,6 +11230,10 @@
                           intptr_t len,
                           Heap::Space space = Heap::kNew);
 
+  static TypedDataPtr Grow(const TypedData& current,
+                           intptr_t len,
+                           Heap::Space space = Heap::kNew);
+
   static void Copy(const TypedDataBase& dst,
                    intptr_t dst_offset_in_bytes,
                    const TypedDataBase& src,
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 1146115..886896f 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -300,6 +300,10 @@
   ASSERT(!function.IsNull());
   set_suspend_state_await(function);
 
+  function = cls.LookupFunctionAllowPrivate(Symbols::_awaitWithTypeCheck());
+  ASSERT(!function.IsNull());
+  set_suspend_state_await_with_type_check(function);
+
   function = cls.LookupFunctionAllowPrivate(Symbols::_returnAsync());
   ASSERT(!function.IsNull());
   set_suspend_state_return_async(function);
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index fc71c35..656fafc 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -177,6 +177,7 @@
   RW(Function, async_star_stream_controller_add_stream)                        \
   RW(Function, suspend_state_init_async)                                       \
   RW(Function, suspend_state_await)                                            \
+  RW(Function, suspend_state_await_with_type_check)                            \
   RW(Function, suspend_state_return_async)                                     \
   RW(Function, suspend_state_return_async_not_future)                          \
   RW(Function, suspend_state_init_async_star)                                  \
@@ -268,8 +269,11 @@
   RW(Code, nullable_type_parameter_tts_stub)                                   \
   RW(Code, type_parameter_tts_stub)                                            \
   RW(Code, unreachable_tts_stub)                                               \
+  RW(Array, ffi_callback_functions)                                            \
   RW(Code, slow_tts_stub)                                                      \
+  /* Roots for JIT/AOT snapshots are up until here (see to_snapshot() below)*/ \
   RW(Code, await_stub)                                                         \
+  RW(Code, await_with_type_check_stub)                                         \
   RW(Code, clone_suspend_state_stub)                                           \
   RW(Code, init_async_stub)                                                    \
   RW(Code, resume_stub)                                                        \
@@ -285,7 +289,6 @@
   RW(GrowableObjectArray, instructions_tables)                                 \
   RW(Array, obfuscation_map)                                                   \
   RW(Array, loading_unit_uris)                                                 \
-  RW(Array, ffi_callback_functions)                                            \
   RW(Class, ffi_pointer_class)                                                 \
   RW(Class, ffi_native_type_class)                                             \
   // Please remember the last entry must be referred in the 'to' function below.
@@ -365,6 +368,7 @@
   DO(init_late_instance_field_stub, InitLateInstanceField)                     \
   DO(init_late_final_instance_field_stub, InitLateFinalInstanceField)          \
   DO(await_stub, Await)                                                        \
+  DO(await_with_type_check_stub, AwaitWithTypeCheck)                           \
   DO(clone_suspend_state_stub, CloneSuspendState)                              \
   DO(init_async_stub, InitAsync)                                               \
   DO(resume_stub, Resume)                                                      \
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 7ed7c7e..48b4e15 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -2310,6 +2310,37 @@
   EXPECT_EQ(1, new_array.Length());
 }
 
+ISOLATE_UNIT_TEST_CASE(TypedData_Grow) {
+  const intptr_t kSmallSize = 42;
+  const intptr_t kLargeSize = 1000;
+
+  Random random(42);
+
+  for (classid_t cid = kTypedDataInt8ArrayCid; cid < kByteDataViewCid;
+       cid += 4) {
+    ASSERT(IsTypedDataClassId(cid));
+
+    const auto& small = TypedData::Handle(TypedData::New(cid, kSmallSize));
+    EXPECT_EQ(small.LengthInBytes(), kSmallSize * small.ElementSizeInBytes());
+
+    for (intptr_t i = 0; i < TypedData::ElementSizeFor(cid) * kSmallSize; i++) {
+      small.SetUint8(i, static_cast<uint8_t>(random.NextUInt64() & 0xff));
+    }
+
+    const auto& big = TypedData::Handle(TypedData::Grow(small, kLargeSize));
+    EXPECT_EQ(small.GetClassId(), big.GetClassId());
+    EXPECT_EQ(big.LengthInBytes(), kLargeSize * big.ElementSizeInBytes());
+
+    for (intptr_t i = 0; i < TypedData::ElementSizeFor(cid) * kSmallSize; i++) {
+      EXPECT_EQ(small.GetUint8(i), big.GetUint8(i));
+    }
+    for (intptr_t i = TypedData::ElementSizeFor(cid) * kSmallSize;
+         i < TypedData::ElementSizeFor(cid) * kLargeSize; i++) {
+      EXPECT_EQ(0, big.GetUint8(i));
+    }
+  }
+}
+
 ISOLATE_UNIT_TEST_CASE(InternalTypedData) {
   uint8_t data[] = {253, 254, 255, 0, 1, 2, 3, 4};
   intptr_t data_length = ARRAY_SIZE(data);
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index 1f8a82c..6d99e14 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -160,6 +160,7 @@
   V(InstantiateTypeArgumentsMayShareFunctionTA)                                \
   V(NoSuchMethodDispatcher)                                                    \
   V(Await)                                                                     \
+  V(AwaitWithTypeCheck)                                                        \
   V(InitAsync)                                                                 \
   V(Resume)                                                                    \
   V(ReturnAsync)                                                               \
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index ad65d07..a2bdefe 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -418,6 +418,7 @@
   V(_WeakProperty, "_WeakProperty")                                            \
   V(_WeakReference, "_WeakReference")                                          \
   V(_await, "_await")                                                          \
+  V(_awaitWithTypeCheck, "_awaitWithTypeCheck")                                \
   V(_classRangeCheck, "_classRangeCheck")                                      \
   V(_current, "_current")                                                      \
   V(_ensureScheduleImmediate, "_ensureScheduleImmediate")                      \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 993da29..545ea2d 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -1037,95 +1037,84 @@
   }
 }
 
-const intptr_t kInitialCallbackIdsReserved = 16;
-int32_t Thread::AllocateFfiCallbackId() {
-  Zone* Z = Thread::Current()->zone();
-  if (ffi_callback_code_ == GrowableObjectArray::null()) {
-    ffi_callback_code_ = GrowableObjectArray::New(kInitialCallbackIdsReserved);
-  }
-  const auto& array = GrowableObjectArray::Handle(Z, ffi_callback_code_);
-  array.Add(Code::Handle(Z, Code::null()));
-  const int32_t id = array.Length() - 1;
-
-  // Allocate a native callback trampoline if necessary.
-#if !defined(DART_PRECOMPILED_RUNTIME)
-  if (NativeCallbackTrampolines::Enabled()) {
-    auto* const tramps = isolate()->native_callback_trampolines();
-    ASSERT(tramps->next_callback_id() == id);
-    tramps->AllocateTrampoline();
-  }
-#endif
-
-  return id;
-}
-
-void Thread::SetFfiCallbackCode(int32_t callback_id, const Code& code) {
-  Zone* Z = Thread::Current()->zone();
-
-  /// In AOT the callback ID might have been allocated during compilation but
-  /// 'ffi_callback_code_' is initialized to empty again when the program
-  /// starts. Therefore we may need to initialize or expand it to accomodate
-  /// the callback ID.
+void Thread::EnsureFfiCallbackMetadata(intptr_t callback_id) {
+  static constexpr intptr_t kInitialCallbackIdsReserved = 16;
 
   if (ffi_callback_code_ == GrowableObjectArray::null()) {
     ffi_callback_code_ = GrowableObjectArray::New(kInitialCallbackIdsReserved);
   }
-
-  const auto& array = GrowableObjectArray::Handle(Z, ffi_callback_code_);
-
-  if (callback_id >= array.Length()) {
-    const int32_t capacity = array.Capacity();
-    if (callback_id >= capacity) {
-      // Ensure both that we grow enough and an exponential growth strategy.
-      const int32_t new_capacity =
-          Utils::Maximum(callback_id + 1, capacity * 2);
-      array.Grow(new_capacity);
-    }
-    array.SetLength(callback_id + 1);
-  }
-
-  array.SetAt(callback_id, code);
-}
-
-void Thread::SetFfiCallbackStackReturn(int32_t callback_id,
-                                       intptr_t stack_return_delta) {
 #if defined(TARGET_ARCH_IA32)
-#else
-  UNREACHABLE();
-#endif
-
-  Zone* Z = Thread::Current()->zone();
-
-  /// In AOT the callback ID might have been allocated during compilation but
-  /// 'ffi_callback_code_' is initialized to empty again when the program
-  /// starts. Therefore we may need to initialize or expand it to accomodate
-  /// the callback ID.
-
   if (ffi_callback_stack_return_ == TypedData::null()) {
     ffi_callback_stack_return_ = TypedData::New(
         kTypedDataInt8ArrayCid, kInitialCallbackIdsReserved, Heap::kOld);
   }
+#endif  // defined(TARGET_ARCH_IA32)
 
-  auto& array = TypedData::Handle(Z, ffi_callback_stack_return_);
+  const auto& code_array =
+      GrowableObjectArray::Handle(zone(), ffi_callback_code_);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  auto* const tramps = isolate()->native_callback_trampolines();
+#if defined(TARGET_ARCH_IA32)
+  auto& stack_array = TypedData::Handle(zone(), ffi_callback_stack_return_);
+#endif
+#endif
 
-  if (callback_id >= array.Length()) {
-    const int32_t capacity = array.Length();
-    if (callback_id >= capacity) {
-      // Ensure both that we grow enough and an exponential growth strategy.
-      const int32_t new_capacity =
-          Utils::Maximum(callback_id + 1, capacity * 2);
-      const auto& new_array = TypedData::Handle(
-          Z, TypedData::New(kTypedDataUint8ArrayCid, new_capacity, Heap::kOld));
-      for (intptr_t i = 0; i < capacity; i++) {
-        new_array.SetUint8(i, array.GetUint8(i));
-      }
-      array ^= new_array.ptr();
-      ffi_callback_stack_return_ = new_array.ptr();
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // Verify invariants of the 3 arrays hold.
+  ASSERT(code_array.Length() == tramps->next_callback_id());
+#if defined(TARGET_ARCH_IA32)
+  ASSERT(code_array.Length() <= stack_array.Length());
+#endif
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+
+  if (code_array.Length() <= callback_id) {
+    // Ensure we've enough space in the 3 arrays.
+    while (!(callback_id < code_array.Length())) {
+      code_array.Add(Code::null_object());
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      tramps->AllocateTrampoline();
+#endif
     }
+
+#if defined(TARGET_ARCH_IA32)
+    if (callback_id >= stack_array.Length()) {
+      const int32_t capacity = stack_array.Length();
+      if (callback_id >= capacity) {
+        // Ensure both that we grow enough and an exponential growth strategy.
+        const int32_t new_capacity =
+            Utils::Maximum(callback_id + 1, capacity * 2);
+        stack_array = TypedData::Grow(stack_array, new_capacity);
+        ffi_callback_stack_return_ = stack_array.ptr();
+      }
+    }
+#endif  // defined(TARGET_ARCH_IA32)
   }
 
-  ASSERT(callback_id < array.Length());
-  array.SetUint8(callback_id, stack_return_delta);
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  // Verify invariants of the 3 arrays (still) hold.
+  ASSERT(code_array.Length() == tramps->next_callback_id());
+#if defined(TARGET_ARCH_IA32)
+  ASSERT(code_array.Length() <= stack_array.Length());
+#endif
+#endif
+  ASSERT(callback_id < code_array.Length());
+}
+
+void Thread::SetFfiCallbackCode(const Function& ffi_trampoline,
+                                const Code& code,
+                                intptr_t stack_return_delta) {
+  const intptr_t callback_id = ffi_trampoline.FfiCallbackId();
+  EnsureFfiCallbackMetadata(callback_id);
+
+  const auto& code_array =
+      GrowableObjectArray::Handle(zone(), ffi_callback_code_);
+  code_array.SetAt(callback_id, code);
+
+#if defined(TARGET_ARCH_IA32)
+  const auto& stack_delta_array =
+      TypedData::Handle(zone(), ffi_callback_stack_return_);
+  stack_delta_array.SetUint8(callback_id, stack_return_delta);
+#endif  // defined(TARGET_ARCH_IA32)
 }
 
 void Thread::VerifyCallbackIsolate(int32_t callback_id, uword entry) {
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 0b6c6d9..8829bd7 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -184,6 +184,7 @@
 #define CACHED_FUNCTION_ENTRY_POINTS_LIST(V)                                   \
   V(suspend_state_init_async)                                                  \
   V(suspend_state_await)                                                       \
+  V(suspend_state_await_with_type_check)                                       \
   V(suspend_state_return_async)                                                \
   V(suspend_state_return_async_not_future)                                     \
   V(suspend_state_init_async_star)                                             \
@@ -1072,20 +1073,13 @@
     }
   }
 
-  int32_t AllocateFfiCallbackId();
-
   // Store 'code' for the native callback identified by 'callback_id'.
   //
   // Expands the callback code array as necessary to accomodate the callback
   // ID.
-  void SetFfiCallbackCode(int32_t callback_id, const Code& code);
-
-  // Store 'stack_return' for the native callback identified by 'callback_id'.
-  //
-  // Expands the callback stack return array as necessary to accomodate the
-  // callback ID.
-  void SetFfiCallbackStackReturn(int32_t callback_id,
-                                 intptr_t stack_return_delta);
+  void SetFfiCallbackCode(const Function& ffi_trampoline,
+                          const Code& code,
+                          intptr_t stack_return_delta);
 
   // Ensure that 'callback_id' refers to a valid callback in this isolate.
   //
@@ -1351,6 +1345,10 @@
   void FinishEntering(TaskKind kind);
   void PrepareLeaving();
 
+  // Ensures that we have allocated neccessary thread-local data structures for
+  // [callback_id].
+  void EnsureFfiCallbackMetadata(intptr_t callback_id);
+
   static void SetCurrent(Thread* current) { OSThread::SetCurrentTLS(current); }
 
 #define REUSABLE_FRIEND_DECLARATION(name)                                      \
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index 5f6d7b2..97944df 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -815,15 +815,17 @@
 ///
 /// Libraries are not actually deferred in DDC, so this just records the import
 /// for runtime validation, then returns a future that completes immediately.
-Future loadLibrary(
+Future<void> loadLibrary(
     @notNull String enclosingLibrary, @notNull String importPrefix) {
-  var result = JS('', '#.get(#)', deferredImports, enclosingLibrary);
-  if (JS<bool>('', '# === void 0', result)) {
-    JS('', '#.set(#, # = new Set())', deferredImports, enclosingLibrary,
-        result);
+  _loadLibrary() {
+    var result = JS('', '#.get(#)', deferredImports, enclosingLibrary);
+    if (JS<bool>('', '# === void 0', result)) {
+      JS('', '#.set(#, # = new Set())', deferredImports, enclosingLibrary,
+          result);
+    }
+    JS('', '#.add(#)', result, importPrefix);
   }
-  JS('', '#.add(#)', result, importPrefix);
-  return Future.value();
+  return Future(_loadLibrary);
 }
 
 void checkDeferredIsLoaded(
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 78914b6..6753ed8 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -311,6 +311,33 @@
 
   @pragma("vm:entry-point", "call")
   @pragma("vm:invisible")
+  Object? _awaitWithTypeCheck<T>(Object? object) {
+    if (_thenCallback == null) {
+      _createAsyncCallbacks();
+    }
+    // Declare a new variable to avoid type promotion of 'object' to
+    // 'Future<T>', as it would disable further type promotion to '_Future'.
+    final obj = object;
+    if (obj is Future<T>) {
+      if (object is _Future) {
+        if (object._isComplete) {
+          _awaitCompletedFuture(object);
+        } else {
+          object._thenAwait<dynamic>(
+              unsafeCast<dynamic Function(dynamic)>(_thenCallback),
+              unsafeCast<dynamic Function(Object, StackTrace)>(_errorCallback));
+        }
+      } else {
+        _awaitUserDefinedFuture(obj);
+      }
+    } else {
+      _awaitNotFuture(object);
+    }
+    return _functionData;
+  }
+
+  @pragma("vm:entry-point", "call")
+  @pragma("vm:invisible")
   static Future _returnAsync(Object suspendState, Object? returnValue) {
     _Future future;
     if (suspendState is _SuspendState) {
diff --git a/sdk/lib/_internal/vm/lib/typed_data_patch.dart b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
index 6add8ca..c75a8c0 100644
--- a/sdk/lib/_internal/vm/lib/typed_data_patch.dart
+++ b/sdk/lib/_internal/vm/lib/typed_data_patch.dart
@@ -2156,8 +2156,11 @@
   @pragma("vm:external-name", "TypedData_SetInt32x4")
   external void _setInt32x4(int offsetInBytes, Int32x4 value);
 
+  @pragma("vm:recognized", "other")
+  @pragma("vm:exact-result-type", _Float64x2)
   @pragma("vm:external-name", "TypedData_GetFloat64x2")
   external Float64x2 _getFloat64x2(int offsetInBytes);
+  @pragma("vm:recognized", "other")
   @pragma("vm:external-name", "TypedData_SetFloat64x2")
   external void _setFloat64x2(int offsetInBytes, Float64x2 value);
 
@@ -5105,6 +5108,23 @@
     _typedData._setFloat32x4(offsetInBytes + byteOffset, value);
   }
 
+  Float64x2 getFloat64x2(int byteOffset, [Endian endian = Endian.big]) {
+    if (byteOffset < 0 || byteOffset + 15 >= length) {
+      throw new RangeError.range(byteOffset, 0, length - 15, "byteOffset");
+    }
+    // TODO(johnmccutchan) : Need to resolve this for endianity.
+    return _typedData._getFloat64x2(offsetInBytes + byteOffset);
+  }
+
+  void setFloat64x2(int byteOffset, Float64x2 value,
+      [Endian endian = Endian.big]) {
+    if (byteOffset < 0 || byteOffset + 15 >= length) {
+      throw new RangeError.range(byteOffset, 0, length - 15, "byteOffset");
+    }
+    // TODO(johnmccutchan) : Need to resolve this for endianity.
+    _typedData._setFloat64x2(offsetInBytes + byteOffset, value);
+  }
+
   @pragma("vm:recognized", "other")
   @pragma("vm:non-nullable-result-type")
   @pragma("vm:prefer-inline")
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index c3a9a8d..4fc40e4 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -560,19 +560,8 @@
     }
   }
 
-  Future<String> readAsString({Encoding encoding = utf8}) {
-    // TODO(dart:io): If the change in async semantics to run synchronously
-    // until await lands, this is as efficient as
-    // return _tryDecode(await readAsBytes(), encoding);
-    var stack = StackTrace.current;
-    return readAsBytes().then((bytes) {
-      try {
-        return _tryDecode(bytes, encoding);
-      } catch (e) {
-        return new Future.error(e, stack);
-      }
-    });
-  }
+  Future<String> readAsString({Encoding encoding = utf8}) async =>
+      _tryDecode(await readAsBytes(), encoding);
 
   String readAsStringSync({Encoding encoding = utf8}) =>
       _tryDecode(readAsBytesSync(), encoding);
diff --git a/tests/ffi/abi_specific_int_incomplete_jit_test.dart b/tests/ffi/abi_specific_int_incomplete_jit_test.dart
index 2ecb4c9..dfd8c1e 100644
--- a/tests/ffi/abi_specific_int_incomplete_jit_test.dart
+++ b/tests/ffi/abi_specific_int_incomplete_jit_test.dart
@@ -30,7 +30,6 @@
   testInlineArray();
   testInlineArray2();
   testAsFunction();
-  testFromFunction();
 }
 
 void testSizeOf() {
@@ -135,26 +134,3 @@
         .asFunction<IncompleteArrayStruct Function()>();
   });
 }
-
-int myIncr(int a) => a + 1;
-
-IncompleteArrayStruct myIncompleteReturn() =>
-    nullptr.cast<IncompleteArrayStruct>().ref;
-
-int myIncompleteArg(IncompleteArrayStruct a) => 5;
-
-void testFromFunction() {
-  Expect.throws(() {
-    Pointer.fromFunction<Incomplete Function(Int32)>(myIncr, 3);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<Int32 Function(Incomplete)>(myIncr, 3);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<IncompleteArrayStruct Function()>(myIncompleteReturn);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<Int32 Function(IncompleteArrayStruct)>(
-        myIncompleteArg, 3);
-  });
-}
diff --git a/tests/ffi/ffi_callback_unique_test.dart b/tests/ffi/ffi_callback_unique_test.dart
new file mode 100644
index 0000000..1435bf2
--- /dev/null
+++ b/tests/ffi/ffi_callback_unique_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+
+void main() {
+  final a = <int>[];
+  final b = <int>[];
+  for (int i = 0; i < 10; ++i) {
+    // Several pointers for same call site.
+    a.add(
+        Pointer.fromFunction<Int Function()>(nativeToDartCallback, 0).address);
+    b.add(
+        Pointer.fromFunction<Int Function()>(nativeToDartCallback, 1).address);
+  }
+  // Another pointer from a different call site.
+  a.add(Pointer.fromFunction<Int Function()>(nativeToDartCallback, 0).address);
+  b.add(Pointer.fromFunction<Int Function()>(nativeToDartCallback, 1).address);
+
+  ensureEqualEntries(a);
+  ensureEqualEntries(b);
+
+  // The two functions have different exceptional return and should have
+  // therefore a different ffi trampoline.
+  Expect.notEquals(a.first, b.first);
+}
+
+void ensureEqualEntries(List<int> entries) {
+  final first = entries.first;
+  for (int i = 1; i < entries.length; ++i) {
+    Expect.equals(first, entries[i]);
+  }
+}
+
+int nativeToDartCallback() => 42;
diff --git a/tests/ffi_2/abi_specific_int_incomplete_jit_test.dart b/tests/ffi_2/abi_specific_int_incomplete_jit_test.dart
index b507ed9..b15274e 100644
--- a/tests/ffi_2/abi_specific_int_incomplete_jit_test.dart
+++ b/tests/ffi_2/abi_specific_int_incomplete_jit_test.dart
@@ -32,7 +32,6 @@
   testInlineArray();
   testInlineArray2();
   testAsFunction();
-  testFromFunction();
 }
 
 void testSizeOf() {
@@ -137,26 +136,3 @@
         .asFunction<IncompleteArrayStruct Function()>();
   });
 }
-
-int myIncr(int a) => a + 1;
-
-IncompleteArrayStruct myIncompleteReturn() =>
-    nullptr.cast<IncompleteArrayStruct>().ref;
-
-int myIncompleteArg(IncompleteArrayStruct a) => 5;
-
-void testFromFunction() {
-  Expect.throws(() {
-    Pointer.fromFunction<Incomplete Function(Int32)>(myIncr, 3);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<Int32 Function(Incomplete)>(myIncr, 3);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<IncompleteArrayStruct Function()>(myIncompleteReturn);
-  });
-  Expect.throws(() {
-    Pointer.fromFunction<Int32 Function(IncompleteArrayStruct)>(
-        myIncompleteArg, 3);
-  });
-}
diff --git a/tests/ffi_2/ffi_callback_unique_test.dart b/tests/ffi_2/ffi_callback_unique_test.dart
new file mode 100644
index 0000000..1435bf2
--- /dev/null
+++ b/tests/ffi_2/ffi_callback_unique_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:ffi';
+
+import 'package:expect/expect.dart';
+
+void main() {
+  final a = <int>[];
+  final b = <int>[];
+  for (int i = 0; i < 10; ++i) {
+    // Several pointers for same call site.
+    a.add(
+        Pointer.fromFunction<Int Function()>(nativeToDartCallback, 0).address);
+    b.add(
+        Pointer.fromFunction<Int Function()>(nativeToDartCallback, 1).address);
+  }
+  // Another pointer from a different call site.
+  a.add(Pointer.fromFunction<Int Function()>(nativeToDartCallback, 0).address);
+  b.add(Pointer.fromFunction<Int Function()>(nativeToDartCallback, 1).address);
+
+  ensureEqualEntries(a);
+  ensureEqualEntries(b);
+
+  // The two functions have different exceptional return and should have
+  // therefore a different ffi trampoline.
+  Expect.notEquals(a.first, b.first);
+}
+
+void ensureEqualEntries(List<int> entries) {
+  final first = entries.first;
+  for (int i = 1; i < entries.length; ++i) {
+    Expect.equals(first, entries[i]);
+  }
+}
+
+int nativeToDartCallback() => 42;
diff --git a/tests/language/async/await_type_check_test.dart b/tests/language/async/await_type_check_test.dart
new file mode 100644
index 0000000..9dc9ec1
--- /dev/null
+++ b/tests/language/async/await_type_check_test.dart
@@ -0,0 +1,81 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Verifies that 'await' should check if the awaited value has a correct
+// Future<T> type before awaiting it. A Future of incompatible type
+// should not be awaited.
+//
+// Regression test for https://github.com/dart-lang/sdk/issues/49396.
+
+// Requirements=nnbd-strong
+
+import 'dart:async';
+import 'package:expect/expect.dart';
+import '../static_type_helper.dart';
+
+class A {}
+
+abstract class B<X> extends A implements Future<X> {
+  Future<X> get fut;
+  asStream() => fut.asStream();
+  catchError(error, {test}) => fut.catchError(error, test: test);
+  then<R>(onValue, {onError}) => fut.then(onValue, onError: onError);
+  timeout(timeLimit, {onTimeout}) =>
+      fut.timeout(timeLimit, onTimeout: onTimeout);
+  whenComplete(action) => fut.whenComplete(action);
+}
+
+class C extends B<Object?> {
+  final Future<Object?> fut = Future.value(CompletelyUnrelated());
+}
+
+class CompletelyUnrelated {}
+
+class C1 extends A {}
+
+class C2 extends B<C1> {
+  final Future<C1> fut = Future.value(C1());
+}
+
+void main() async {
+  final Object o = Future<Object?>.value();
+  var o2 = await o; // Remains a future.
+  o2.expectStaticType<Exactly<Object>>();
+  Expect.isTrue(o2 is Future<Object?>);
+  Expect.identical(o2, o);
+
+  final FutureOr<Object> x = Future<Object?>.value();
+  var x2 = await x; // Remains a future.
+  x2.expectStaticType<Exactly<Object>>();
+  Expect.isTrue(x2 is Future<Object?>);
+  Expect.identical(x2, x);
+
+  final FutureOr<Future<int>> y = Future<int>.value(1);
+  var y2 = await y; // Remains a `Future<int>`.
+  y2.expectStaticType<Exactly<Future<int>>>();
+  Expect.isTrue(y2 is Future<int>);
+  Expect.identical(y2, y);
+
+  A a = C();
+  var a2 = await a; // Remains an `A`.
+  a2.expectStaticType<Exactly<A>>();
+  Expect.isTrue(a2 is A);
+  Expect.identical(a2, a);
+
+  Future<void> f<X extends Object>(X x) async {
+    var x2 = await x; // Remains a `Future<Object?>`.
+    Expect.isTrue(x2 is Future<Object?>);
+    Expect.identical(x2, x);
+  }
+
+  await f(Future<Object?>.value(null));
+
+  Future<void> g<X extends A>(X x) async {
+    var x2 = await x; // The future is awaited.
+    Expect.isTrue(x2 is C1);
+    Expect.notIdentical(x2, x);
+  }
+
+  await g<A>(C2());
+}
diff --git a/tests/language/sealed_class/sealed_class_construct_error_test.dart b/tests/language/sealed_class/sealed_class_construct_error_test.dart
index 7491ab8..9df3a4c 100644
--- a/tests/language/sealed_class/sealed_class_construct_error_test.dart
+++ b/tests/language/sealed_class/sealed_class_construct_error_test.dart
@@ -16,13 +16,15 @@
 
 main() {
   var error = NotConstructable();
-  //          ^
+  //          ^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
   // [cfe] The class 'NotConstructable' is abstract and can't be instantiated.
   var error2 = AlsoNotConstructable();
   //           ^^^^^^^^^^^^^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.MIXIN_INSTANTIATE
   // [cfe] Couldn't find constructor 'AlsoNotConstructable'.
   var error3 = NotConstructableWithMixin();
-  //           ^
+  //           ^^^^^^^^^^^^^^^^^^^^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
   // [cfe] The class 'NotConstructableWithMixin' is abstract and can't be instantiated.
 }
diff --git a/tests/language/sealed_class/sealed_class_extend_error_test.dart b/tests/language/sealed_class/sealed_class_extend_error_test.dart
index f207ce0..07a4214 100644
--- a/tests/language/sealed_class/sealed_class_extend_error_test.dart
+++ b/tests/language/sealed_class/sealed_class_extend_error_test.dart
@@ -9,13 +9,15 @@
 import 'sealed_class_extend_lib.dart';
 
 abstract class OutsideA extends SealedClass {}
+// [error column 1, length 46]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //             ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
 
 class OutsideB extends SealedClass {
+// [error column 1, length 326]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
   @override
   int foo = 2;
diff --git a/tests/language/sealed_class/sealed_class_implement_error_test.dart b/tests/language/sealed_class/sealed_class_implement_error_test.dart
index ede66e3..c8fda06 100644
--- a/tests/language/sealed_class/sealed_class_implement_error_test.dart
+++ b/tests/language/sealed_class/sealed_class_implement_error_test.dart
@@ -9,13 +9,15 @@
 import "sealed_class_implement_lib.dart";
 
 abstract class OutsideA implements SealedClass {}
+// [error column 1, length 49]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //             ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
 
 class OutsideB implements SealedClass {
+// [error column 1, length 344]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
   @override
   int nonAbstractFoo = 2;
@@ -31,6 +33,7 @@
 }
 
 mixin OutsideMixin implements SealedClass {}
+// [error column 1, length 44]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
diff --git a/tests/language/sealed_class/sealed_class_typedef_error_test.dart b/tests/language/sealed_class/sealed_class_typedef_error_test.dart
index 4a6414a..8535f9f 100644
--- a/tests/language/sealed_class/sealed_class_typedef_error_test.dart
+++ b/tests/language/sealed_class/sealed_class_typedef_error_test.dart
@@ -10,13 +10,15 @@
 import 'sealed_class_typedef_lib.dart';
 
 class ATypeDef extends SealedClassTypeDef {}
+// [error column 1, length 44]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
 
 class BTypeDef implements SealedClassTypeDef {
+// [error column 1, length 213]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
   @override
   int foo = 1;
diff --git a/tests/language/sealed_class/sealed_class_typedef_used_outside_error_test.dart b/tests/language/sealed_class/sealed_class_typedef_used_outside_error_test.dart
index bb84809..7bb6707 100644
--- a/tests/language/sealed_class/sealed_class_typedef_used_outside_error_test.dart
+++ b/tests/language/sealed_class/sealed_class_typedef_used_outside_error_test.dart
@@ -13,13 +13,15 @@
 typedef ATypeDef = SealedClass;
 
 class A extends ATypeDef {}
+// [error column 1, length 27]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
 
 class B implements ATypeDef {
+// [error column 1, length 184]
+// [analyzer] COMPILE_TIME_ERROR.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY
 //    ^
-// [analyzer] unspecified
 // [cfe] Sealed class 'SealedClass' can't be extended, implemented, or mixed in outside of its library.
   int foo = 1;
 }
diff --git a/tools/VERSION b/tools/VERSION
index 4848c71..4dcdfe1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 0
 PATCH 0
-PRERELEASE 3
+PRERELEASE 4
 PRERELEASE_PATCH 0